⑴ android中edittext怎麼獲取游標
下面是edittext獲取游標的例子,更多關於edittext的介紹,請參考android學習手冊。
android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,
源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼
int index = editText.getSelectionStart();
int index = editText.getSelectionStart();
2.在游標處插入字元
[java] view plain print?
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.insert(index, "aaaa");
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.insert(index, "aaaa");
3.刪除游標前字元
[java] view plain print?
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.delete(index-1, index);
⑵ 誰能推薦好的android進階書籍
組件是在需要的時候才會使用,
比如servie ,了解注意它的生命周期。和什麼情況下使用,運行在系統中,什麼時候殺掉,什麼時候不讓它被殺掉。等等。
弄安卓有小一段時間了,控制項。組件,線程,非同步都不難用,主要是有編程思想,
可惜我現在還沒有。腦子比較亂。不用刻意去弄這些。做項目的時候需要的時候,
網路,看下API 很簡單。
做完一個客戶端。基本都涉及了。
也算是了解了。
書籍的話,瘋狂的講義 不錯。
⑶ 關於初學者學習android的書籍。。。。。
《Android基礎教程》
由淺入深,循序漸進地討論Android開發。
《Android應用開發揭秘》
基礎部分充實豐富,高級部分深入飽含實例,從本質上提高開發者對Android的理解和編程水平。
《Android/Ophone完全講義》
書中內容理論性和實戰性兼備,在Android開發的實戰方面很有代表性。
《Android系統原理及開發要點詳解》
以知識性內容為綱,重點關注開發的要點,以清晰的思路介紹了整個Android的系統原理和開發方法。
《GoogleAndroid SDK開發範例大全》
以範例集的方式來講述android的知識點,詳細介紹了開發android的人機交互界面、android常用的開發控制項、使用android手機收發簡訊等通信服務、開發android手機的自動服務功能和娛樂多媒體功能。
⑷ 如何讓Android獲得網頁上的數據
例子來自於android學習手冊,android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼
//第一種
/**獲取參數(ArrayList<NameValuePair> nameValuePairs,String url)後post給遠程伺服器
* 將獲得的返回結果(String)返回給調用者
* 本函數適用於查詢數量較少的時候
*/
public String posturl(ArrayList<NameValuePair> nameValuePairs,String url){
String result = "";
String tmp= "";
InputStream is = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
return "Fail to establish http connection!";
}
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
tmp=sb.toString();
}catch(Exception e){
return "Fail to convert net stream!";
}
try{
JSONArray jArray = new JSONArray(tmp);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Iterator<?> keys=json_data.keys();
while(keys.hasNext()){
result += json_data.getString(keys.next().toString());
}
}
}catch(JSONException e){
return "The URL you post is wrong!";
}
return result;
}
⑸ android 怎麼判斷是否在時間段 范圍內
Calendar cal = Calendar.getInstance();// 當前日期
int hour = cal.get(Calendar.HOUR_OF_DAY);// 獲取小時
int minute = cal.get(Calendar.MINUTE);// 獲取分鍾
int minuteOfDay = hour * 60 + minute;// 從0:00分開是到目前為止的分鍾數
final int start = 17 * 60 + 20;// 起始時間 17:20的分鍾數
final int end = 19 * 60;// 結束時間 19:00的分鍾數
if (minuteOfDay >= start && minuteOfDay <= end) {
System.out.println("在外圍內");
} else {
System.out.println("在外圍外");
}
推薦學安卓的利器:
android學習手冊,裡面有源碼。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼:
⑹ android 怎麼樣獲取彈出窗口輸入的信息
這個問題也困擾過我,後來我終於發現了。就是一個很簡單的方法. findViewById.
下面解決方法來源於android學習手冊,android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,排列到第四個。
1 類似ListView的AlertDialog
publicclassDialog_{
/**.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
finalString[]arrayFruit=newString[]{"蘋果","橘子","草莓","香蕉"};
DialogalertDialog=newAlertDialog.Builder(this).
setTitle("你喜歡吃哪種水果?").
setIcon(R.drawable.ic_launcher)
.setItems(arrayFruit,newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
Toast.makeText(Dialog_AlertDialogDemoActivity.this,arrayFruit[which],Toast.LENGTH_SHORT).show();
}
}).
setNegativeButton("取消",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
}
}).
create();
alertDialog.show();
}
}
2 自定義布局的AlerDialog 。 一個關鍵方法就是myLoginView .findViewById 獲取各種控制項。
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得自定義View
LayoutInflaterlayoutInflater=LayoutInflater.from(this);
ViewmyLoginView=layoutInflater.inflate(R.layout.login,null);
DialogalertDialog=newAlertDialog.Builder(this).
setTitle("用戶登錄").
setIcon(R.drawable.ic_launcher).
setView(myLoginView).
setPositiveButton("登錄",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
}
}).
setNegativeButton("取消",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
}
}).
create();
alertDialog.show();
}
⑺ android怎麼使用sqlopenhelper
下面是SQLiteOpenHelper增刪改查的例子。
例子來自於android學習手冊,裡面有源碼。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼
我們大家都知道Android平台提供給我們一個資料庫輔助類來創建或打開資料庫,這個輔助類繼承自SQLiteOpenHelper類,在該類的構造器中,調用Context中的方法創建並打開一個指定名稱的資料庫對象。繼承和擴展SQLiteOpenHelper類主要做的工作就是重寫以下兩個方法。
onCreate(SQLiteDatabase db) : 當資料庫被首次創建時執行該方法,一般將創建表等初始化操作在該方法中執行。
onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version):當打開資料庫時傳入的版本號與當前的版本號不同時會調用該方法。
除了上述兩個必須要實現的方法外,還可以選擇性地實現onOpen 方法,該方法會在每次打開資料庫時被調用。
SQLiteOpenHelper 類的基本用法是:當需要創建或打開一個資料庫並獲得資料庫對象時,首先根據指定的文件名創建一個輔助對象,然後調用該對象的getWritableDatabase 或 getReadableDatabase方法 獲得SQLiteDatabase 對象。
調用getReadableDatabase 方法返回的並不總是只讀資料庫對象,一般來說該方法和getWriteableDatabase 方法的返回情況相同,只有在資料庫僅開放只讀許可權或磁碟已滿時才會返回一個只讀的資料庫對象。
下面通過一個簡單的小例子說明SQLiteOpenDatabase的用法,其中包括創建資料庫、插入數據、更新 、查詢等等,我們將查詢後獲取到的數據顯示到TextView上,看一下運行後的效果。MySQLiteHelper
Java代碼
packagexiaohang.meng;
importandroid.content.Context;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
importandroid.database.sqlite.SQLiteDatabase.CursorFactory;
{
//調用父類構造器
publicMySQLiteHelper(Contextcontext,Stringname,CursorFactoryfactory,
intversion){
super(context,name,factory,version);
}
/**
*當資料庫首次創建時執行該方法,一般將創建表等初始化操作放在該方法中執行.
*重寫onCreate方法,調用execSQL方法創建表
**/
@Override
publicvoidonCreate(SQLiteDatabasedb){
db.execSQL("createtableifnotexistshero_info("
+"idintegerprimarykey,"
+"namevarchar,"
+"levelinteger)");
}
//當打開資料庫時傳入的版本號與當前的版本號不同時會調用該方法
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
}
}
Activity01
Java代碼
packagexiaohang.meng;
importandroid.app.Activity;
importandroid.content.ContentValues;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.graphics.Color;
importandroid.os.Bundle;
importandroid.widget.TextView;
{
MySQLiteHelpermyHelper;
TextViewtv;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.tv);
//創建MySQLiteOpenHelper輔助類對象
myHelper=newMySQLiteHelper(this,"my.db",null,1);
//向資料庫中插入和更新數據
insertAndUpdateData(myHelper);
//查詢數據
Stringresult=queryData(myHelper);
tv.setTextColor(Color.RED);
tv.setTextSize(20.0f);
tv.setText("名字 等級 "+result);
}
//向資料庫中插入和更新數據
publicvoidinsertAndUpdateData(MySQLiteHelpermyHelper){
//獲取資料庫對象
SQLiteDatabasedb=myHelper.getWritableDatabase();
//使用execSQL方法向表中插入數據
db.execSQL("insertintohero_info(name,level)values('bb',0)");
//使用insert方法向表中插入數據
ContentValuesvalues=newContentValues();
values.put("name","xh");
values.put("level",5);
//調用方法插入數據
db.insert("hero_info","id",values);
//使用update方法更新表中的數據
//清空ContentValues對象
values.clear();
values.put("name","xh");
values.put("level",10);
//更新xh的level為10
db.update("hero_info",values,"level=5",null);
//關閉SQLiteDatabase對象
db.close();
}
//從資料庫中查詢數據
publicStringqueryData(MySQLiteHelpermyHelper){
Stringresult="";
//獲得資料庫對象
SQLiteDatabasedb=myHelper.getReadableDatabase();
//查詢表中的數據
Cursorcursor=db.query("hero_info",null,null,null,null,null,"idasc");
//獲取name列的索引
intnameIndex=cursor.getColumnIndex("name");
//獲取level列的索引
intlevelIndex=cursor.getColumnIndex("level");
for(cursor.moveToFirst();!(cursor.isAfterLast());cursor.moveToNext()){
result=result+cursor.getString(nameIndex)+" ";
result=result+cursor.getInt(levelIndex)+" ";
}
cursor.close();//關閉結果集
db.close();//關閉資料庫對象
returnresult;
}
@Override
protectedvoidonDestroy(){
SQLiteDatabasedb=myHelper.getWritableDatabase();//獲取資料庫對象
//刪除hero_info表中所有的數據傳入1表示刪除所有行------>點擊back按鈕
db.delete("hero_info","1",null);
super.onDestroy();
}
}
⑻ android 什麼時候使用弱指針
使用bitmap時使用弱引用。android學習手冊中有關於listview中有大量圖片,載入bitmap時使用弱引用載入的小例子。
下面介紹來自於android學習手冊,android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,排在第三、四個。
使用bitmap時容易引起oom,雖然我們可以在bitmap不適用的時候通過recycle方法釋放bitmap佔用的內存,但是如果這個方法調用的時間點不合理,很容易引起 use a recycle bitmap的異常。
對此,可以使用弱引用來管理bitmap。將所有用到的bitmap對象放到一個hashmap中,用弱引用來保存,如果再用到這個bitmap的時候,根據相應的key直接取出來,相當於一個高速緩存池。如果確定不再使用的時候手動將其recycle,保證這個程序不會重復創建過多的bitmap對象。此外弱引用對象可以在系統內存不足的時候自動被系統回收。
如果一個對象只具有軟引用,那麼如果內存空間足夠,垃圾回收器就不會回收它;如果內存空間不足了,就會回收這些對象的內存。只要垃圾回收器沒有回收它,該對象就可以被程序使用。軟引用可用來實現內存敏感的高速緩存。軟引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果軟引用所引用的對象被垃圾回收,Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中。
如果一個對象只具有弱引用,那麼在垃圾回收器線程掃描的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。不過,由於垃圾回收器是一個優先順序很低的線程,因此不一定會很快發現那些只具有弱引用的對象。弱引用也可以和一個引用隊列(ReferenceQueue)聯合使用,如果弱引用所引用的對象被垃圾回收,Java虛擬機就會把這個弱引用加入到與之關聯的引用隊列中。
弱引用與軟引用的根本區別在於:只具有弱引用的對象擁有更短暫的生命周期,可能隨時被回收。而只具有軟引用的對象只有當內存不夠的時候才被回收,在內存足夠的時候,通常不被回收。
在java.lang.ref包中提供了幾個類:SoftReference類、WeakReference類和PhantomReference類,它們分別代表軟引用、弱引用和虛引用。ReferenceQueue類表示引用隊列,它可以和這三種引用類聯合使用,以便跟蹤Java虛擬機回收所引用的對象的活動。
在Android應用的開發中,為了防止內存溢出,在處理一些佔用內存大而且聲明周期較長的對象時候,可以盡量應用軟引用和弱引用技術。
下面以使用軟引用為例來詳細說明。弱引用的使用方式與軟引用是類似的。
假設我們的應用會用到大量的默認圖片,比如應用中有默認的頭像,默認游戲圖標等等,這些圖片很多地方會用到。如果每次都去讀取圖片,由於讀取文件需要硬體操作,速度較慢,會導致性能較低。所以我們考慮將圖片緩存起來,需要的時候直接從內存中讀取。但是,由於圖片佔用內存空間比較大,緩存很多圖片需要很多的內存,就可能比較容易發生OutOfMemory異常。這時,我們可以考慮使用軟引用技術來避免這個問題發生。
首先定義一個HashMap,保存軟引用對象。
private Map<String, SoftReference<Bitmap>> imageCache = new HashMap<String, SoftReference<Bitmap>>();
再來定義一個方法,保存Bitmap的軟引用到HashMap。
public void addBitmapToCache(String path) {
// 強引用的Bitmap對象
Bitmap bitmap = BitmapFactory.decodeFile(path);
// 軟引用的Bitmap對象
SoftReference<Bitmap> softBitmap = new SoftReference<Bitmap>(bitmap);
// 添加該對象到Map中使其緩存
imageCache.put(path, softBitmap);
}
獲取的時候,可以通過SoftReference的get()方法得到Bitmap對象。
public Bitmap getBitmapByPath(String path) {
// 從緩存中取軟引用的Bitmap對象
SoftReference<Bitmap> softBitmap = imageCache.get(path);
// 判斷是否存在軟引用
if (softBitmap == null) {
return null;
}
// 取出Bitmap對象,如果由於內存不足Bitmap被回收,將取得空
Bitmap bitmap = softBitmap.get();
return bitmap;
}
使用軟引用以後,在OutOfMemory異常發生之前,這些緩存的圖片資源的內存空間可以被釋放掉的,從而避免內存達到上限,避免Crash發生。
需要注意的是,在垃圾回收器對這個Java對象回收前,SoftReference類所提供的get方法會返回Java對象的強引用,一旦垃圾線程回收該Java對象之後,get方法將返回null。所以在獲取軟引用對象的代碼中,一定要判斷是否為null,以免出現NullPointerException異常導致應用崩潰。
經驗分享:
到底什麼時候使用軟引用,什麼時候使用弱引用呢?
個人認為,如果只是想避免OutOfMemory異常的發生,則可以使用軟引用。如果對於應用的性能更在意,想盡快回收一些佔用內存比較大的對象,則可以使用弱引用。
還有就是可以根據對象是否經常使用來判斷。如果該對象可能會經常使用的,就盡量用軟引用。如果該對象不被使用的可能性更大些,就可以用弱引用。
另外,和弱引用功能類似的是WeakHashMap。WeakHashMap對於一個給定的鍵,其映射的存在並不阻止垃圾回收器對該鍵的回收,回收以後,其條目從映射中有效地移除。WeakHashMap使用ReferenceQueue實現的這種機制。
⑼ android 如何判斷網路是否能夠上網
實現步驟:
下面解決辦法來自於android學習手冊,android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載。排到第三個。
1、獲取ConnectivityManager對象
Context context = activity.getApplicationContext();
// 獲取手機所有連接管理對象(包括對wi-fi,net等連接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
2、獲取NetworkInfo對象
// 獲取NetworkInfo對象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
3、判斷當前網路狀態是否為連接狀態
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
4、在AndroidManifest.xml中添加訪問當前網路狀態許可權
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
代碼如下:
public class ClassTestDemoActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (isNetworkAvailable(ClassTestDemoActivity.this))
{
Toast.makeText(getApplicationContext(), "當前有可用網路!", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getApplicationContext(), "當前沒有可用網路!", Toast.LENGTH_LONG).show();
}
}
/**
* 檢查當前網路是否可用
*
* @param context
* @return
*/
public boolean isNetworkAvailable(Activity activity)
{
Context context = activity.getApplicationContext();
// 獲取手機所有連接管理對象(包括對wi-fi,net等連接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null)
{
return false;
}
else
{
// 獲取NetworkInfo對象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null && networkInfo.length > 0)
{
for (int i = 0; i < networkInfo.length; i++)
{
System.out.println(i + "===狀態===" + networkInfo[i].getState());
System.out.println(i + "===類型===" + networkInfo[i].getTypeName());
// 判斷當前網路狀態是否為連接狀態
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
}
}
return false;
}
}
⑽ Android中 怎麼獲取apk中的素材圖片
有些APK程序里的圖標、圖片很漂亮,在使用程序時你可能會想,如果能把這些漂亮的圖標、圖片提取出來就好了,其實這是可以辦到的,請看教程。
更多例子請參考android學習手冊,裡面有源碼。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼
本教程以「電影超人」的APK安裝包為例,其它APK程序的提取方法基本相同。以下內容需要在電腦中進行操作。
1.用壓縮軟體打開APK
APK程序其實就是個ZIP壓縮包,想提取其中的資源就得先用解壓縮軟體將其打開,如圖我們在APK安裝包上右鍵、打開方式、選擇壓縮軟體,我這里選擇的是RAR,如果你安裝的是其它的解壓縮軟體,選擇它即可。如果你以前沒有用壓縮軟體打開過APK文件,可以點擊選擇默認程序然後找到解壓縮軟體進行打開。
2.解壓圖片文件夾
用解壓縮軟體打開APK程序後,如圖裡面有幾個文件夾,我們拖出「res」這個文件,一般APK程序的圖片資源都在這個文件中。
3.尋找需要的圖片
把「res」文件夾解壓後我們打開可以看到裡面的幾個文件夾一般程序圖標等圖片都在「drawable-hdpi」這個文件夾,打開看看,是不是有自己需要的東西,如果沒有再到其它的幾個文件夾中查找一下。APK文件里的圖片都是png格式的,可直接查看,這點比水果要厚道了許多。
4.反編譯查找資源
也許大家發現了,解壓後「電影超人」里大量的電影圖片並沒有看到,那是因為APK程序製作時把它們編譯到了「resources.arsc」文件里我們想提取的話把APK文件進行反編譯就可以了。具體反編譯方法這里就不講解了,請自行網路。