与UI有关的知识
一.四种布局
LinearLayout
andriod:orientation指定排列方式,Vertical为竖直方向上,Horizontal为水平方向。
android:layout_gravity指定控件在布局中的对齐方式,top,bottom,center。若排列方式为Horizontal,只能在竖直方向上改变。
一个小栗子:
<EditText Android:width=“0dp” Android:layout_weight=“1” />
<Button Android:width=“0dp” Android:layout_weight=“1” />
此时他们将在水平方向上平分屏幕宽度。
RelativeLayout
Android:layout_alignParentBottom=“true”, Android:layout_alignParentRight=“true”Android:layout_alignParentLeft=“true”, Android:layout_alignParentTop=“true”
Android:layout_centerInParent=“true”
分别使组件位于父布局的上下左右中, 也可以针对某一个组件作为定位点,指定该组件位于中间即可,使用Android:layout_centerInParent=“true”。
Android:llayout_toRightof=“true,同理有toLeftOf,above,below”
FrameLayout
所有组件默认摆放在布局的左上角,可以用android:layout_gravity指定控件在布局中的对齐方式,left,right.
PercentLayout
需要在app/gradle中添加implementation ‘com.android.support:percent:27.0.2’,注意标签要使用完整包名android.support.percent.PercentRelativeLayout。
app:layout_widthPercent=%50,app:layout_heightPercent=%50,宽度和高度各占50%。
二.组件使用
button.setVisibility(…)设置组件是否可见,三种属性,View.GONE(移除),View.VISIBLE,View.INVISIBLE(透明不可见)
常用组件 | 特殊组件 | 自定义组件 |
---|---|---|
Button | ListView | 引入布局 |
TextView | RecyclerView | 创建自定义控件 |
EditText | ||
ImageView | ||
ProgressBar | ||
AlertDialog | ||
ProgressDialog |
常用组件:
Button
Android:textAllCaps="false"禁止自动进行大写转换。
注册监听器:
1.
Button button=(Button) findViewById(R.id.buttonname)
button.setonClickListener(new View.OnclickListener){
public void onClick(View v){
}
}
2…mainactivity …implements View.OnclickListener{
public void onCreate(){
Button button=(Button) findViewById(R.id.buttonname)
button.setonClickListener(this);}
public void onClick(View v){
switch(v.getID()){
case R.id.button{
}//添加逻辑
}
....
}
EditText
android:hint=""//添加隐藏文字,提示性文本。
android:maxlines=""//指定最大行数。
editText.getText().toString();//获取编辑栏中文字并转为字符串。
TextView
andriod:textSize指定文字大小
android:textcolor指定文字颜色
ImageView
android:src=""指定图片路径
ImageView imageview=(Imageview) findViewById(R.id.ImgaeId);//与xml属性配合
imageview.setImageResource(R.id.ImageId);//都可以由图片路径设置图片
ProgressBar
默认为圆圈进度条,style="?android:attr/progressBarStyleHorizontal"//设置为水平进度条
int progress=progress.getProgressBar();
progress+=10;//可以用这个类似的办法来控制进度条进度
AlertDialog
置顶于所有界面元素之上,能够屏蔽其他组件的交互能力,可以作为确认框。
setPosiveButton()为对话框设置确定按钮的点击事件。
ProgressDialog
用法与AlertDialog类似。
Public void onClick(
switch(v.getId()){
case R.id.button:
ProgressDialog progressdialog=new ProgressDialog(MainActivity.this);
progressdialog.setTitle(“ Title”);
progressdialog.setMassage("Loading ...");
progressdialog.setCancelable(true);//传入true可以通过Back取消,传入false则不行
progressdialog.show();
break;//加载完成后应该用dismiss()方法关闭对话框
{
特殊组件(最常用但困难):
ListView
public class FruitAdapter extends ArrayAdapter<Fruit> {
private int resourceId;
public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects){
super(context,textViewResourceId,objects);
resourceId=textViewResourceId;
}
public View getView(int position, View convertView, ViewGroup parent)
{
Fruit fruit=getItem(position);
View view;
ViewHolder viewHolder;
if(convertView==null){
view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);//用于加载布局
viewHolder=new ViewHolder();
viewHolder.fruitimage=(ImageView) view.findViewById(R.id.fruit_image);
viewHolder.fruitname=(TextView) view.findViewById(R.id.fruit_name);
view.setTag(viewHolder);//将ViewHolder存在View中
}else {
view=convertView;
viewHolder=(ViewHolder) view.getTag();//重新获取ViewHolder
}
viewHolder.fruitimage.setImageResource(fruit.getImageId());
viewHolder.fruitname.setText(fruit.getName());//设置图片和文字栏展示
return view;
}
class ViewHolder{
ImageView fruitimage;
TextView fruitname;
}
public class Fruit {
private String name;
private int imageId;
public Fruit(String name,int imageId){this.name=name; this.imageId=imageId; }
public int getImageId() {return imageId; }
public String getName() {return name;}
}
//点击事件
public class MainActivity extends AppCompatActivity {
private List<Fruit> fruitList=new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
/*super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);*/
FruitAdapter adapter=new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitList);
ListView listView=(ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置监听器
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Fruit fruit=fruitList.get(position);
Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
}
RecyclerView
1.配置
implementation ‘com.android.support:appcompat-v7:28.0.0’
implementation ‘com.android.support:recyclerview-v7:28.0.0’
2.使用(单独见文)
引入布局
在xml文件中加入这句:
<include layout=""@layout_id"