当前位置:首页 » 安卓系统 » 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 09:39:14 浏览:914
脸书怎么注册安卓 发布:2025-02-06 09:36:47 浏览:381
车用安卓导航无线打不开什么原因 发布:2025-02-06 09:27:50 浏览:790
安卓与苹果如何互相传送文件 发布:2025-02-06 09:27:40 浏览:26
华为服务器盘符如何分配 发布:2025-02-06 09:26:41 浏览:560
传奇h5源码下载 发布:2025-02-06 09:26:06 浏览:78
编译uclibc 发布:2025-02-06 09:09:04 浏览:152
用gcc编译16位汇编 发布:2025-02-06 09:06:07 浏览:823
什么低端安卓手机不卡 发布:2025-02-06 09:03:32 浏览:14
我的世界服务器卡领地 发布:2025-02-06 08:50:45 浏览:256