ViewTreeObserver示例(二)
来源:互联网 发布:android程序员面试题 编辑:程序博客网 时间:2024/06/06 05:43
main.xml如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/touchModeChangeTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello_world" android:layout_marginTop="30dip" android:gravity="center" android:textColor="@android:color/black" android:textSize="25sp" /> <EditText android:id="@+id/firstEditText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="30dip" android:gravity="center" android:textColor="@android:color/black" android:textSize="25sp" /> <EditText android:id="@+id/secondEditText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="30dip" android:gravity="center" android:textColor="@android:color/black" android:textSize="25sp" /> <TextView android:id="@+id/globalFocusChangeTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="显示焦点的变化" android:layout_marginTop="30dip" android:gravity="center" android:textColor="@android:color/black" android:textSize="15sp" /> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="30dip" android:gravity="center" android:text="切换第二个EditText的显示和隐藏" android:textColor="@android:color/black" android:textSize="15sp" /> </LinearLayout>
MainActivity如下:
package cn.com.testviewtreeobserver2;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewTreeObserver;import android.view.ViewTreeObserver.OnGlobalFocusChangeListener;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.view.ViewTreeObserver.OnPreDrawListener;import android.view.ViewTreeObserver.OnTouchModeChangeListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.app.Activity;/** * Demo描述: * ViewTreeObserver的测试 * 备注说明: * OnTouchModeChangeListener的相关 * 测试未实现 * 重要参考: * http://blog.csdn.net/pathuang68/article/details/6431035 * Thank you * */public class MainActivity extends Activity {private View mLinearLayout;private TextView mTouchModeChangeTextView;private EditText mFirstEditText;private EditText mSecondEditText;private TextView mGlobalFocusChangeTextView;private Button mButton;private ViewTreeObserver mViewTreeObserver;private boolean isClick=false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();} private void init(){ mLinearLayout=findViewById(R.id.LinearLayout); mTouchModeChangeTextView=(TextView) findViewById(R.id.touchModeChangeTextView); mFirstEditText=(EditText) findViewById(R.id.firstEditText); mSecondEditText=(EditText) findViewById(R.id.secondEditText); mGlobalFocusChangeTextView=(TextView) findViewById(R.id.globalFocusChangeTextView); mButton=(Button) findViewById(R.id.button); mButton.setOnClickListener(new ButtonOnClickListenerImpl()); mViewTreeObserver=mLinearLayout.getViewTreeObserver(); viewTreeObserverAddListeners(); } //为ViewTreeObserver设置各种监听 private void viewTreeObserverAddListeners(){ //当一个视图树的触摸模式发生改变时,调用该方法 //在该实例中未实现对于该方法的相关测试 mViewTreeObserver.addOnTouchModeChangeListener(new OnTouchModeChangeListener() {@Overridepublic void onTouchModeChanged(boolean isInTouchMode) {if (isInTouchMode) {mTouchModeChangeTextView.setText("In touch mode");}else{mTouchModeChangeTextView.setText("Not in touch mode");}}}); //当在一个视图树中全局布局发生改变 //或者视图树中的某个视图的可视状态发生改变时调用该方法 mViewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {if (isClick) {if (mSecondEditText.isShown()) {mFirstEditText.setText("监听到第二个TextView被显示");} else {mFirstEditText.setText("监听到第二个TextView被隐藏");}}}}); //当一个视图树将要绘制时,调用该方法 //此处当mFirstEditText将要绘制时给其设置了hint和字体大小 //注意:必须返回true,否则整个界面不能完整显示 mViewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {@Overridepublic boolean onPreDraw() {mFirstEditText.setHint("调用了OnPreDrawListener");mFirstEditText.setTextSize((float)15.0);return true;}}); //当在一个视图树中的焦点状态发生改变时,调用该方法 mViewTreeObserver.addOnGlobalFocusChangeListener(new OnGlobalFocusChangeListener() {@Overridepublic void onGlobalFocusChanged(View oldFocus, View newFocus) {if (oldFocus!=null&&newFocus!=null) {mGlobalFocusChangeTextView.setText("Focus FROM:" + oldFocus.toString()+ " TO:" + newFocus.toString());}}}); } //注意使用View.INVISIBLE不会调用OnGlobalLayoutListener//因为View.INVISIBLE只是控件不可见却还占据着位置,此时//布局在实质上没有发生变化 private class ButtonOnClickListenerImpl implements OnClickListener{@Overridepublic void onClick(View v) {mLinearLayout.setClickable(false);isClick=true;if (mSecondEditText.isShown()) {mSecondEditText.setVisibility(View.GONE);} else {mSecondEditText.setVisibility(View.VISIBLE);}} }}
- ViewTreeObserver示例(二)
- ViewTreeObserver示例(一)
- ViewTreeObserver用法示例
- ViewTreeObserver
- ViewTreeObserver
- ViewTreeObserver
- ViewTreeObserver
- ViewTreeObserver
- ViewTreeObserver
- ViewTreeObserver
- ViewTreeObserver
- ViewTreeObserver
- ViewTreeObserver?
- ViewTreeObserver
- ViewTreeObserver
- Android学习笔记(二)--- ViewTreeObserver
- ViewTreeObserver.OnPreDrawListener
- ViewTreeObserver简介
- 在mac上用VirtualBox装深度xp出现 "Sector not found reading drive A"解决
- c语言之冒泡排序
- Cannot refer to a non-final variable mylis inside an inner class defined in a different method
- undefined reference to `__aeabi_uidivmod' 解决方法
- UVa 825 Walking on the Safe Side (DP)
- ViewTreeObserver示例(二)
- $_SERVER
- java 实现带括号的加减乘除四则运算
- TCP/IP 某些最常见的错误原因码 (errno)列表
- .Net部署
- oracle 和 db2 排序 order by desc/asc nulls last/nulss first 的用法将空值放到最后最前
- 好上司是怎么样的
- arm-linux-gcc 交叉编译工具的建立
- ViewTreeObserver示例(一)