博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android基础知识杂记
阅读量:5247 次
发布时间:2019-06-14

本文共 5122 字,大约阅读时间需要 17 分钟。

 
Activity中获取视图组件对象: public View findViewById(@IdRes int id)    该方法以组件的资源ID为参数,返回一个视图对象View,需要强转成具体的视图类对象。
Button mTrueButton = (Button) findViewById(R.id.true_button);
设置视图组件的点击监听器: 视图组件对象调用视图对象注册监听器的方法: public void setOnClickListener(@Nullable OnClickListener l) 该方法的参数是一个监听器,是一个实现了 OnClickListener 接口的对象,OnClickListener 接口中有一个 public void onClick(View v) 方法。
mTrueButton.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        //监听其中需要执行的具体代码    }});

 

创建提示消息:

调用Toast类的以下方法:

public static Toast makeText(Context context, CharSequence text, @Duration int duration)
public static Toast makeText(Context context, @StringRes int resId, @Duration int duration) 上面的 makeText 方法,接收三个参数:   Context: 通常是Activity的一个实例(Activity本身就是Context的子类)   第二个参数:既可以是要显示的字符串消息的资源ID,也可以是字符串本身   第三个参数:通常是两个Toast常量(Toast.LENGTH_SHORT、Toast.LENGTH_LONG)中的一个,用来指定toast消息的停留时间

makeText 方法返回Toast对象,然后调用Toast的实例方法 show() ,在屏幕上显示消息

Toast.makeText(QuizActivity.this, "这是要显示的消息", Toast.LENGTH_LONG).show();

上面直接显示消息的方式有一个问题:每次点击按钮,都会弹出一个消息,如果多次连续点击,消息会连续多次弹出。解决如下

 

监听消息的弹出和退出(设置上一次消息消失前,点击按钮不会有任何反应):

mTrueButton.setOnClickListener(new View.OnClickListener() {    boolean isClicked = false;    @Override    public void onClick(View v) {        //获取Toast对象        Toast toast = Toast.makeText(QuizActivity.this, "你好,你点击了确认按钮。", Toast.LENGTH_SHORT); //获取显示消息的View对象        View view = toast.getView(); //设置显示消息的View对象的状态改变监听器        view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
//显示消息时触发 @Override public void onViewAttachedToWindow(View v) { isClicked = true; } //消息消失时触发 @Override public void onViewDetachedFromWindow(View v) { isClicked = false; } }); if (!isClicked) { //调用Toast的实例方法 show() 显示消息 toast.show(); } }});

 

设置Toast消息显示的位置:

使用Toast的实例方法 

public void setGravity(int gravity, int xOffset, int yOffset) 参数一:Gravity类的常量值(Gravity.TOP、Gravity.BOTTOM、Gravity.CENTER、Gravity.LEFT ...) 参数二:消息在x轴上的偏移量(消息默认是显示在x抽的中间的) 参数三:消息在y轴上的偏移量
mFalseButton.setOnClickListener(new View.OnClickListener(){    @Override    public void onClick(View v) {        Toast toast = Toast.makeText(QuizActivity.this, "你好,你点击了取消按钮。", Toast.LENGTH_LONG);        toast.setGravity(Gravity.TOP, -100, 0);        toast.show();    }});

 

 

引用资源:

项目中的所有资源(布局文件,组件,图片,字符串等),系统都会为它们统一分配id。

引用组件:@id

引用字符串:@string

引用图片:@drawable

 

 

输出日志信息:

Android的 android.util.Log 类能够向系统级共享日志中心发送日志信息。

按照信息输出的冗长顺序排列,从少到多为:ERROR  , WARN , INFO , DEBUG , VERBOSE 。

 

Log 类有如常用的下日志记录方法:

Log.v(String tag, String msg):

  发送 VERBOSE 日志信息

 

Log.d(String tag, String msg);

  发送 DEBUG 日志信息

 

Log.i(String tag, String msg);

  发送 INFO 日志信息

 

Log.w(String tag, String msg);

  发送 WARN 日志信息

 

Log.e(String tag, String msg):

  发送 ERROR 日志信息

上面方法的参数:

  tag:用于识别日志消息的来源,通常标识发生日志调用的类或活动。

  msg: 被发送的消息。

 

一个很好的约定是,tag 在对应的类中声明一个常亮:

private static final String TAG = “当前所在类的类名(允许的最大字符长度为32)” ;

 

 

创建水平模式布局:

在项目窗口中,右键单击 res 目录,选择 New -> Android resource directory 选项:

 

选择 Resource type 为 layout,保持 Source set 为 main 不变,接下来选中 Available qualifires 中的 Orientation ,点击 >> 按钮,将其加入到右边的 Choosen qualifires 中:

 

 

 设置 Screen orientation 为 Landscape ,并确保 目录名(Directory 那么)为 layout_land ,然后点击 OK ,就会在 res 目录下创建 layout_land 文件夹:

这里的 _land 后缀名是配置修饰符的一个使用例子,Android依靠 res 子目录的配置修饰符定位最佳资源以匹配当前设备配置。

此时,当设备处于水平方向时,Android会自动找到并使用 res/layout_land 目录下的布局资源。

 

 

保存Activity状态数据,以应对设备旋转:

旋转设备会改变设备配置(device configuration),设备配置实际是一系列特征组合,用来描述设备当前状态。

这些特征包含:屏幕方向、屏幕像素密度、屏幕尺寸、键盘类型、底座模式及语言等。

为匹配不同的设备配置,应用会提供不同的备选资源。

在运行时配置变更发生时,可能会有更合适的资源来匹配新的设备配置,所以,Android会销毁当前Activity实例,为新配置寻找更合适的资源,然后创建新实例使用这些资源。

 所以,要让设备旋转后保持Activity实例的状态不变,就需要想个办法保存Activity实例当前的状态,以便设备旋转后将新创建的Activity实例回复到之前的状态。

 

Activity中提供了一个 protected void onSaveInstanceState(Bundle outState) 方法,该方法通常在 onStop() 方法调用之前由系统调用,

除非用户按后退键(因为,用户点击后退键,就是告知Android,acitivity用完了,所以系统就会认为没有重要的数据需要保存,就不会调用 onSaveInstanceState() 方法)。

复写该方法就可以自定义当Activity实例进入停止状态前需要执行的操作。

 

方法 onSaveInstanceState(Bundle) 的默认实现要求所有activity视图将自身状态数据保存在 Bundle(Bundle是存储字符串键与限定类型值之间映射关系(键值对)的一种结构) 对象中。

 

通过复写 onSaveInstanceState(Bundle) 方法,将一些数据保存到 Bundle 中,当新建Activity时,系统会将Bundle对象传递给 onCreate(Bundle) ,然后就可以在 onCreate(Bundle) 方法中取回这些数据。

例如:

public class QuizActivity extends AppCompatActivity {    private static final String TAG = "QuizActivity";    private static final String KEY_INDEX = "index";    private int mCurrentIndex = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_quiz);        Log.d(TAG, "onCreate(Bundle) method called.");        if (savedInstanceState != null) {            mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);        }        System.out.println(mCurrentIndex);  // 100    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        Log.i(TAG, "onSaveInstanceState method called.");        mCurrentIndex = 100;        outState.putInt(KEY_INDEX, mCurrentIndex);    }

 

 

 

 

 

 

 

 
 

转载于:https://www.cnblogs.com/yingtoumao/p/8563353.html

你可能感兴趣的文章
Linux上安装Libssh2
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
Hibernate的实体类为什么需要实现 java.io.Serializable 接口
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
LeetCode 160. Intersection of Two Linked Lists
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
HTML5与CSS3基础(五)
查看>>