Android界面开发

界面布局

LinearLayout(线性布局)

XML属性相关方法说 明
Android:orientationSetOrientation(int)设置布局内组件的排列方式,可以设置为horizontal(水平排列)、vertical(垂直排列、默认值)两个值的其中之一
Android:gravitysetGravity(int)设置布局内组件的对齐方式,可选值包括top、bottom、left、right、center_vertical、fill_vertical、center_horizonal、fill_horizontal、center、fill、clip_vertical和clip_horizontal.这些属性值可以同时指定,各属性之间用竖线隔开。如要指定组件靠左下角对齐,可以用left|botton

FrameLayout(框架布局)

​ 框架布局是组织视图控件最简单和最有效地布局之一。该布局一般只用来显示单视图或者层叠的多视图。

XML属性相关方法说 明
Android:foregroundSetForeground(Drawable)设置框架布局视窗的前景图像
Android:foregroundGravitySetForegroundGravity(int)定义绘制前景图像的gravity属性

TableLayout(表格布局)

​ 表格布局中每一个TableRow对象或者View对象为一行。TableRow是一个容器,因此可以向TableRow中添加子控件,每添加一个子控件该表格就增加一列。

XML属性相关方法说 明
Android:collapseColumnsSetColumnCollapsed(int,boolean)设置需要被隐藏的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。
Android:shrinkColumnssetShrinkAllColumns(boolean)设置允许被收缩的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。
Android:stretchColumnssetStretchAllColumns (boolean)设置允许被拉伸的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。

GridLayout(网格布局)

RelativeLayout(相对布局)

AbsoluteLayout(绝对布局)

界面控件

  1. TextView 和 EditText

    TextView只用于显示文本,EditText可编辑文本

  2. CheckBox 和 RadioButton

    添加RadioButton

    添加之前要先设至一个RadioGroup,设置为一组,这样才能单选

    img

    package com.example.sx5_2;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.view.Display;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Adapter;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
    	Button button = null;
    	String Name = "";
    	String Password = "";
    	String gender = "";
    	String Hobby = "";
    	String Country = "";
    	String City = "";
    
    //	Spinner Countries,citites;
    	String[] countryItem;
    	String[] cityItem;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		//Spinner
    		Spinner Countries = (Spinner)findViewById(R.id.spinner);
    		Spinner Cities = (Spinner)findViewById(R.id.spinner2);
    		//绑定注册按钮
    		button = (Button)findViewById(R.id.button2);
    		button.setOnClickListener(new View.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				EditText name = (EditText)findViewById(R.id.editTextTextMultiLine2);
    				Name = "姓名:" + name.getText().toString() +"\n";
    				EditText password = (EditText)findViewById(R.id.editTextTextMultiLine3);
    				Password = "密码:" + password.getText().toString() + "\n";
    				//根据ID找到RadioGroup实例
    				RadioGroup group = (RadioGroup)findViewById(R.id.radiogroup);
    				//绑定一个匿名监听器
    				group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    					@Override
    					public void onCheckedChanged(RadioGroup group, int checkedId) {
    						//获取变更后的选中项的ID
    						int radioButtonId = group.getCheckedRadioButtonId();
    						//根据ID获取RadioButton的实例
    						RadioButton radiobutton = (RadioButton)MainActivity.this.findViewById(radioButtonId);
    						//更新文本内容,已符合选中项
    						gender = "你的性别是:" + (String)radiobutton.getText() + "; ";
    					}
    				});
    				Hobby = "体育爱好:";
    				CheckBox checkbox1 = (CheckBox)findViewById(R.id.checkBox1);
    				CheckBox checkbox2 = (CheckBox)findViewById(R.id.checkBox2);
    				CheckBox checkbox3 = (CheckBox)findViewById(R.id.checkBox3);
    				CheckBox checkbox4 = (CheckBox)findViewById(R.id.checkBox4);
    				//对选项进行确定
    				if(checkbox1.isChecked()){
    					Hobby = Hobby + checkbox1.getText()+" ";
    				}
    				if(checkbox2.isChecked()){
    					Hobby = Hobby + checkbox2.getText()+" ";
    				}
    				if(checkbox3.isChecked()){
    					Hobby = Hobby + checkbox3.getText()+" ";
    				}
    				if(checkbox4.isChecked()){
    					Hobby = Hobby + checkbox4.getText()+" ";
    				}
    				DisplayToast(Name + Password + Country + City + gender + Hobby);
    			}
    		});
    		Countries = findViewById(R.id.spinner);
    		//获取array中定义的值
    		countryItem = getResources().getStringArray(R.array.countries);
    		//添加Spinner监听事件
    		Countries.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    			@Override
    			public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    				Country = "国籍:" + countryItem[position] + "\n";
    			}
    
    			@Override
    			public void onNothingSelected(AdapterView<?> parent) {
    
    			}
    		});
    
    		Cities = findViewById(R.id.spinner2);
    		//获取array中定义的值
    		cityItem = getResources().getStringArray(R.array.cities);
    		//添加Spinner监听事件
    		Cities.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    			@Override
    			public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    				City = "城市:" + cityItem[position] + "\n";
    			}
    
    			@Override
    			public void onNothingSelected(AdapterView<?> parent) {
    
    			}
    		});
    
    	}
    
    	public void DisplayToast(String str){
    		Toast.makeText(this,str,Toast.LENGTH_LONG).show();
    	}
    
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		getMenuInflater().inflate(R.menu.activity_main,menu);
    		return true;
    	}
    }
    
  3. Spinner

    添加Spinner组件,有两种方法,一种是在java代码中实现,一种是在xml中实现。对我来说肯定选择后者,方便快捷而且不会混乱。但要在res文件夹中values文件夹中创建两个xml文件,用来存放string数组,这个数组就是spinner的下拉item。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="countries">
            <item>中国</item>
            <item>日本</item>
            <item>美国</item>
        </string-array>
    </resources>  
    

    ​ 同时在spinner的xml代码中,要添加以下代码,类似spinner引用该数组。android:entries="@array/countries"

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="409dp"
        android:layout_height="80dp"
        android:entries="@array/countries"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="228dp" />
    

事件处理

  1. 匿名内部类作为监听器类

    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setClass(OtherActivity.this,MainActivity.class);
            OtherActivity.this.startActivity(intent);
            OtherActivity.this.finish();
        }
    });
    
  2. 内部类作为事件监听器类

    //内部类,放在Acitvity类中
    class MyClickListener implements View.OnClickListener{
        @override
        public void onClick(View v){
            DisplayToast("事件触发器");
        }
    }
    
  3. 外部类作为事件监听器类

    //新建一个MyClickListner类作为外部类
    public class MyClickListener implements OnClickListener{
        ...
    }
    
    //MainActivity.java
    protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_other);
    		Button button = (Button)findViewById(R.id.XXX);
        	button.setOnClickListener(new MyClickLister(this));
    }
    
  4. Activity本身作为事件监听类

    public class MainActivity extends AppCompatActivity implements OnClickListner{
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
            //此时按钮响应事件就要改变了
            public void onClick(View v){
                DisplayToast("事件触发成功");
            }		
    	}
    }
    

如果觉得本文对你有帮助的话,不妨关注作者一波,小小的关注其实对我很重要。更多高质量内容与资料请访问:个人主页:修心的小屋

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值