當前位置:首頁 » 安卓系統 » android設置監聽

android設置監聽

發布時間: 2023-07-08 05:08:21

Ⅰ Android 手機軟鍵盤的彈起和關閉的監聽

       在很多Android App 開發的過程中,需要對Activity 中 軟鍵盤的彈起和關閉進項監聽,但是Andoid中並沒有提供相對應的api進行監聽, 我有一個簡單的方法。

首先需要知道一些基礎知識

在manifest文件中可以設置Activity的android:windowSoftInputMode屬性,這個屬性值常見的設置如下:android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

那麼這里值的含義列表如下:

1、stateUnspecified:軟鍵盤的狀態並沒有指定,系統將選擇一個合適的狀態或依賴於主題的設置

2、stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity里的狀態,無論是隱藏還是顯示

3、stateHidden:用戶選擇activity時,軟鍵盤總是被隱藏

4、stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤也總是被隱藏的

5、stateVisible:軟鍵盤通常是可見的

6、stateAlwaysVisible:用戶選擇activity時,軟鍵盤總是顯示的狀態

7、adjustUnspecified:默認設置,通常由系統自行決定是隱藏還是顯示

8、adjustResize:該Activity總是調整屏幕的大小以便留出軟鍵盤的空間

9、adjustPan:當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分

案例:

1.我們需要將監聽所在的Activity在Manifest文件中的設置為如下形式:

<activity 

android:name="com.zy.project.MainActivity"

android:label="@string/app_name"

android:windowSoftInputMode="stateAlwaysHidden|adjustResize" >

<intent-filter>

         <action android:name="android.intent.action.MAIN/>

        <category android:name="android.intent.category.LAUNCHER/>

</intent-filter>

</activity>

當有軟鍵盤彈起時,Activity的布局大小會被滾動上去,但是你仍然可以通過滑動瀏覽所有。

2 需要在外層布局文件設置一個id,並在activity 中設置監聽

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnLayoutChangeListener;

import android.widget.Toast;

public class MainActivity extends Activity implements OnLayoutChangeListener{

//Activity最外層的Layout視圖

private View rootView;

//屏幕高度

private int screenHeight = 0;

//軟體盤彈起後所佔高度閥值 一般是佔用屏幕的1/3

private int keyHeight = 0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

rootView = findViewById(R.id.root_layout);

//獲取屏幕高度

screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();

//閥值設置為屏幕高度的1/3

keyHeight = screenHeight/3;

}

@Override

protected void onResume() {

super.onResume();

//添加layout大小發生改變監聽器

rootView.addOnLayoutChangeListener(this);

}

@Override

public void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {

//old是改變前的左上右下坐標點值,沒有old的是改變後的左上右下坐標點值

// System.out.println(oldLeft + " " + oldTop +" " + oldRight + " " + oldBottom);

// System.out.println(left + " " + top +" " + right + " " + bottom);

//現在認為只要控制項將Activity向上推的高度超過了1/3屏幕高,就認為軟鍵盤彈起

if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > keyHeight)){

Toast.makeText(MainActivity.this, "監聽到軟鍵盤彈起...", Toast.LENGTH_SHORT).show();

}else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > keyHeight)){

Toast.makeText(MainActivity.this, "監聽到軟體盤關閉...", Toast.LENGTH_SHORT).show();

}

}

本文來自:http://m.blog.csdn.net/bear_huangzhen/article/details/45896333

Ⅱ Android 超簡單實現網路狀態的監聽

我們做項目的時候,不可避免的要做網路狀態的監聽,一般我們都是抽取出一個工具類來實現,比如:

細致的你當然還會再寫一個判斷網路類型的方法,反手再來一個例:

然後就可以在相應的操作前進行判斷網路的判斷:

但是這樣做也有些問題:

接下來就是本文的重點,如何通過 NetStatusBus 這個庫來解決以上問題,讓你的網路狀態監聽變得前所未有的簡單粗暴。

到這里就已經結束了,你的所有網路操作已經都可以清晰優雅的在訂閱方法中進行處理了,當然你也可以繼續往下看。

訂閱方法必須填寫一個NetType參數,可以通過NetType的值來判斷當前網路類型。

@NetSubscribe中 netType為可選值,可以設置訂閱的類型,可選值類型如下:

NetType.AUTO

這是默認值,任何網路狀態發生變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

只要當前是由 WIFI 改變引發的網路狀態變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

只要當前是由移動網路改變引發的網路狀態變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

NetType.NONE

只有當網路丟失時,該類型訂閱者才會被回調。

有人會覺得,我用個庫爽就行了管它的原理干什麼?

你放心,我只是小小的描述一下實現方式。

原理簡單來說,就是在全局初始化的時候就綁定對網路的變化監聽。然後將進行注冊的父類所有的訂閱方法保存至集合中,這里涉及到一些方法的校驗,最後在網路狀態發生改變時利用 java 反射機制遍歷執行所有訂閱方法。熟悉 EventBus 的小夥伴已經看出來了這里借鑒了一小部分 EventBus 的思想。

回到第一步,那麼具體是如何綁定對網路狀態變化的監聽呢?

以前我們是通過注冊廣播來實現綁定網路變更的監聽,在Android 7.0 以後,Google 基於性能和安全原因對廣播進行了很多限制,比如監聽網路變更的廣播 android.net.conn.CONNECTIVITY_CHANGE 使用靜態注冊的方式則無法生效,而動態注冊的方式雖然可以生效但畢竟不是最優解。

同樣出於性能和安全,以及擁抱變化的角度,最終我們還是使用官方推薦的方式,利用 ConnectivityManager.NetworkCallback 來進行網路變化的監聽,這是在Android 5.0即android api 21推出的API,目前Android 5.0以上的市場佔有率在 85%以上,隨著國內各大廠商正在積極的推進適配普及Android Q,這個比例還會進一步增大,所以個人人認為無需過於擔心低版本適配。

使用的時候出現這個問題是由於少添加了許可權。

Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.

java.lang.RuntimeException: Unable to create application com.jiyun.wanandroid.WanApplication: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.

加上這幾個許可權就好了:

附上原文地址: https://www.jianshu.com/p/2fea980b3e56

Ⅲ android 資料庫怎麼監聽數據變化

在android中經常會用到改變資料庫內容後再去使用資料庫更新的內容,很多人會重新去query一遍,但是這樣的問題就是程序會特別占內存,而且有可能會摟關cursor而導致程序內存未釋放等等。其實android內部提供了一種ContentObserver的東西來監聽資料庫內容的變化。
ContentObserver的構造函數需要一個參數Hanlder,因為ContentObserver內部使用了一個實現Runnable介面的內部類NotificationRunnable,來實現資料庫內容的變化。需要使用hanlder去post消息。注冊ContentObserver的方法是:getContentResolver().registerContentObserver(uri, notifyForDescendents, observer).
上面3個參數為:uri----Uri類型,是需要監聽的資料庫的uri.
notifyForDescendents---boolean true的話就會監聽所有與此uri相關的uri。false的話則是直接特殊的uri才會監聽。一般都設置為true.
observer-----ContentObserver 就是需要的contentobserver.
初始化一個ContentObserver對象,重載onChange(boolean ),在這個方法里去操作資料庫的使用,針對變化後的使用。

Ⅳ android實現監聽

Android設置按鈕監聽,方法如下:

方法1:在xml布局文件中配置onClick屬性,例如:android:onClick="onBtnClick",在對應的Activity中加入如下代碼:

publicvoidonBtnClick(Viewview){
switch(view.getId()){
//若有多個按鈕的onClick都為onBtnClick,則可以通過id判斷
}
}

方法2:在Activity中使用findViewById後setOnClickListener,該類必須實現View.OnClickListener接

.OnClickListener{

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
findViewById(R.id.button).setOnClickListener(this);
}

@Override
publicvoidonClick(Viewv){
//在這里處理id為R.id.button的點擊事件,多個按鈕可以通過id判斷
}
}

方法3:實例化一個OnClickListener

{

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
findViewById(R.id.button).setOnClickListener(onClickListener);
}

View.=newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//在這里處理id為R.id.button的點擊事件,多個按鈕可以通過id判斷
}
};

Ⅳ Android studio怎麼給按鈕設置監聽,並讓editText顯示文字

假設你的按鈕拖拽在activity_main.xml文件裡面,你的監聽就是在Myactivity.java設置(簡單說就是你在哪個xml文件里放置了一個按鈕,就在哪個對應xml的java文件寫),而不需要新建一個class

接下來的是設置監聽

設置監聽第一步:

聲明一個Button按鍵(btn1是自己命名)

找到EditText的位置(給剛剛命名的EditText賦值)

也是在setContentView(R.layout.****);的下面輸入下面的代碼

然後在倒數第一個 } 前面輸入

String str1 = et3.getText().toString();//獲取文本框的內容並賦值給str1

String str2 = et4.getText().toString();//獲取文本框的內容並賦值給str2

String str3 = et5.getText().toString();//獲取文本框的內容並賦值給str3

str1、str2、str3是自己命名的字元串,到後面你想要用到文本框的內容就輸入str這些自己命名的String

希望能幫到你

Ⅵ android 怎麼自定義監聽事件

新建一個android工程,找到工程下res->layout->activity_main.xml文件並打開

從左側工具欄,拖入button到界面上,button默認id為button1

1、在Activity中給button綁定監聽事件(setOnClickListener),代碼如下:
//button綁定監聽事件
Button btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder build = new Builder(MainActivity.this);
build.setMessage("Test").show();
}
});

2、直接在layout.xml中綁定onclick事件;
同時添加對應的監聽事件處理函數
public void Test(View v){
AlertDialog.Builder build = new Builder(this);
build.setMessage("Test").show();
}

運行程序,在模擬器/真機中查看效果
點擊button,彈出Test提示框,說明事件綁定成功。

Ⅶ 在android中怎樣給整個頁面設置監聽事件

您可以類似這樣,先實例化子頁面中的Button控制項,然後將實例化後的控制項綁定監聽事件 View view=LayoutInflater.from(context).inflate(R.layout.abc_action_bar_view_list_nav_layout,null); Button button= (Button) view.findViewById(R.id.action_bar); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //寫上點擊後要執行的事件 } }); 當然了,您要在不同頁面實現不同的功能的話,您可以將以上代碼寫在viewPager.setOnPageChangeListener的滾動回調方法當中進行頁面滾動的判斷,從而執行不同的點擊事件。希望能幫到您,如果還有什麼問題,歡迎您繼續追問。謝謝。

熱點內容
成績評選演算法 發布:2025-02-06 11:42:51 瀏覽:994
資料庫測試數據 發布:2025-02-06 11:31:05 瀏覽:821
球頭軸編程 發布:2025-02-06 11:29:36 瀏覽:280
為什麼安卓系統不能收縮許可權 發布:2025-02-06 11:27:58 瀏覽:730
演算法4視頻 發布:2025-02-06 11:19:20 瀏覽:933
51內置音效卡需要什麼主機配置 發布:2025-02-06 11:18:33 瀏覽:838
防針刺傷的物品配置有哪些 發布:2025-02-06 11:11:25 瀏覽:670
游戲數據反編譯 發布:2025-02-06 11:05:30 瀏覽:400
逍遙安卓在哪裡下載的視頻 發布:2025-02-06 10:50:42 瀏覽:877
上編程序 發布:2025-02-06 10:49:08 瀏覽:796