在应用的开发中,UI界面是很重要的一块。因为其是直接呈现给用户的东西。人都是喜欢美好的事物,我一直对界面有一种特别的挑剔,与我的手机主题不搭调的APP我是不会使用的。我曾经的梦想,不,也可以说现在的梦想以及以后的梦想之一也是可以出自己的绘本。所以《黑客与画家》那本书感动我至今,我想作者真真是潇洒的,有一天,也可以希望自己可以重新回到校园,选一所喜欢的学校,读一个喜欢的专业,无关功利,只因兴趣。我想我是不会放弃的。我写博客有总结的作用,但更重要的是一种记录吧。毕竟总结很多方式都可以,但是记录我希望是永恒的,等我哪天想起,就会来翻看一下以前的博客,回想下当时的心情。所以博客里面大都在自言自语,这是我想自己讲给自己的话,自己为自己留下的记录。
言归正传,关于UI的设置,Android为用户提供了四种方式。下面一一讲来。
一:使用XML布局UI界面。
在res/layout下有相应的XML布局文件。每新建一个Activity,res/layout 都会自动新建一个与之名称对应的XML文件,创建后,R.java会自动收录该布局资源。在Activity中使用
setContentView(R.layout.name);
即可显示相应的布局文件内容。name是相应的XML文件名。示例如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <EditText android:id="@+id/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit_message" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" /> </LinearLayout>
这个例子依然是官网的例子,短小精悍,我想所有的教程都是从官网资料演变而来的,不如直接看官网,顺便可以练习英文。
其实这一段代码,让我想起了以前用flex的情景,和flex写界面语法是非常相似的,所以有一种莫名的熟悉感。Activity 在Android 中差不多和Swing 中的(J)Frame 相类,View 在Android 中和Swing 中的(J)Components 相类,TextView 在Android 中和Swing 中的(J)Lable 相类,EditText 在Android 中和Swing 中的(J)TextField 相类,Button 在Android 中和Swing 中的(J)Button 相类,因为写过一点Java的缘故,还是很容易接受的。
二:写Java代码布局UI界面(类似Java Swing)
//1,创建布局管理器,并且设置布局管理器的属性
FrameLayout frame =new FrameLayout(this);//创建帧布局管理器
// frame.setBackgroundDrawable(this.getResources().getDrawable
// (R.drawable.background));//设置背景图片
// frame.setBackground(this.getResources().getDrawable(R.drawable.background));
setContentView(frame);
TextView text1=new TextView(this);//相当于Swing 中的(J)Lable
text1.setText("在代码中控制UI界面");
text1.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);//设置字体大小,单位为像素
text1.setTextColor(Color.rgb(1, 1, 1));//设置颜色
frame.addView(text1);
text2=new TextView(this);
text2.setText("单击进入游戏......");
text2.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);//设置字体大小,单位为像素
text2.setTextColor(Color.rgb(1, 1, 1));//设置颜色
FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity=Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL;//设置居中
text2.setLayoutParams(params);//设置布局参数
frame.addView(text2);
三:使用XML和Java代码混合布局UI界面。
XML实现方便快捷,但是缺少灵活性,Java实现灵活,但是开发过程繁琐。可以使用XML和Java混合使用来布局界面。把变化小,行为比较固定的组件放在XML里,把变化较多,行为控制比较复杂的组件来使用Java代码实现。
android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:background="@drawable/background" android:id="@+id/layout"
public class MainActivity extends ActionBarActivity {
private ImageView[] img=new ImageView[4];
private int[] imgPath=new int[]{
R.drawable.img01,R.drawable.img02,R.drawable.img03,
R.drawable.img04
};//声明并初始化一个保存图片的数组
// @SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout=(LinearLayout)findViewById(R.id.layout);
for(int i=0;i<imgPath.length;i++){
img[i]=new ImageView(this);
img[i].setImageResource(imgPath[i]);
img[i].setPadding(5, 5, 5, 5);
FrameLayout.LayoutParams params=new FrameLayout.LayoutParams(
253,148);
img[i].setLayoutParams(params);
//layout.addView(img[i]);
}
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
要注意的是Fragment的使用。在最新的Android SDK,新建一个Project后是有连个XML的,一个activity_main.xml,一个fragment_main.xml。