Java安卓学习总结(五)

第1章 Android开发初体验(1/1)

在前一阵子,我还尝试用eclipse做安卓开发时,总是被有关IDE而不是安卓开发本身的问题所困扰,身心俱疲。转战到AS之后,目前算是正式进入了正式的系统的学习之中了。我将参考《Android编程权威指南(第三版)》,以章节的方式对学习成果进行总结,并且记录下所遇到的问题。

有关string.xml

首先是有关string.xml的内容。Android Studio的string.xml没有Resources的界面,要创建有关新的string资源必须写代码,不能直接按照eclipse的方式add一个。并且似乎不可以直接创建string资源,即不可

@+string/...

想要使用string资源就必须提前新建好,不能就地解决。不过id是可以就地新建的,string不可以,这很奇怪。

有关Toast

创建并且显示一个toast实例的代码可以如下:

Toast.makeText(QuizActivity.this, R.string.correct_toast, Toast.LENGTH_SHORT).show();

makeToast()方法如下:

public static Toast makeText(Context context, int resId, @Duration int duration)throws Resources.NotFoundException {
    return makeText(context, context.getResources().getText(resId), duration);
}

其为静态方法并且返回值为Toast对象,因此可以直接再后面调用show()方法。

然后我尝试分步创建Toast实例,之后app出错直接退出了:

Toast toast=new Toast(QuizActivity.this);
toast.makeText(QuizActivity.this, R.string.correct_toast, Toast.LENGTH_SHORT);
toast.show();

仔细分析之后发现makeText()是静态方法,它不是针对某一个具体的实例而使其成为标准toast的;因此它是返回一个Toast对象。如果我的toast实例只调用makeText()方法,对自身没有任何影响。修改之后让toast指向makeText()返回的对象:

Toast toast=new Toast(QuizActivity.this);
toast=toast.makeText(QuizActivity.this, R.string.incorrect_toast, Toast.LENGTH_SHORT);
toast.show();

此外Toast还可以通过setView(View view)显示一个控件,

我依照此法创建了一个包含TextView的控件,如下:

Toast toast=new Toast(QuizActivity.this);
toast.setDuration(Toast.LENGTH_SHORT);
TextView text = new TextView(QuizActivity.this);
text.setText(R.string.incorrect_toast);
text.setTextSize(30);
toast.setView(text);
toast.show();

以及可以先添加一个包括两个TextView的布局:

Toast toast=new Toast(QuizActivity.this);
toast.setDuration(Toast.LENGTH_SHORT);
LinearLayout ll = new LinearLayout(QuizActivity.this);
TextView text1 = new TextView(QuizActivity.this);
TextView text2 = new TextView(QuizActivity.this);
text1.setText(R.string.incorrect_toast);
text2.setText(R.string.correct_toast);
text1.setTextSize(30);
text2.setTextSize(30);
ll.addView(text1);
ll.addView(text2);
toast.setView(ll);
toast.show();

挑战练习:定制toast消息

需要使用setGravity()方法时的toast显示在屏幕上方。参照安卓开发者手册

第一个猜一下就知道是默认位置,后两个应该是个性化的位置消息,其中xoffset是距离屏幕中线的距离,yoffset是距离屏幕顶端的若干距离(不是从0开始)。

一下列举一些例子来具体探究用法:

toast.setGravity(Gravity.TOP,0,0);
toast.setGravity(Gravity.TOP,0,200);
toast.setGravity(Gravity.TOP,200,200);
toast.setGravity(Gravity.TOP,-200,200);

发表评论