Android界面开发
Posted 修心_666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android界面开发相关的知识,希望对你有一定的参考价值。
界面布局
LinearLayout(线性布局)
XML属性 | 相关方法 | 说 明 |
---|---|---|
android:orientation | SetOrientation(int) | 设置布局内组件的排列方式,可以设置为horizontal(水平排列)、vertical(垂直排列、默认值)两个值的其中之一 |
Android:gravity | setGravity(int) | 设置布局内组件的对齐方式,可选值包括top、bottom、left、right、center_vertical、fill_vertical、center_horizonal、fill_horizontal、center、fill、clip_vertical和clip_horizontal.这些属性值可以同时指定,各属性之间用竖线隔开。如要指定组件靠左下角对齐,可以用left|botton |
FrameLayout(框架布局)
框架布局是组织视图控件最简单和最有效地布局之一。该布局一般只用来显示单视图或者层叠的多视图。
XML属性 | 相关方法 | 说 明 |
---|---|---|
Android:foreground | SetForeground(Drawable) | 设置框架布局视窗的前景图像 |
Android:foregroundGravity | SetForegroundGravity(int) | 定义绘制前景图像的gravity属性 |
TableLayout(表格布局)
表格布局中每一个TableRow对象或者View对象为一行。TableRow是一个容器,因此可以向TableRow中添加子控件,每添加一个子控件该表格就增加一列。
XML属性 | 相关方法 | 说 明 |
---|---|---|
Android:collapseColumns | SetColumnCollapsed(int,boolean) | 设置需要被隐藏的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。 |
Android:shrinkColumns | setShrinkAllColumns(boolean) | 设置允许被收缩的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。 |
Android:stretchColumns | setStretchAllColumns (boolean) | 设置允许被拉伸的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。 |
GridLayout(网格布局)
RelativeLayout(相对布局)
AbsoluteLayout(绝对布局)
界面控件
-
TextView 和 EditText
TextView只用于显示文本,EditText可编辑文本
-
CheckBox 和 RadioButton
添加RadioButton
添加之前要先设至一个RadioGroup,设置为一组,这样才能单选
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; } }
-
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" />
事件处理
-
匿名内部类作为监听器类
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(); } });
-
内部类作为事件监听器类
//内部类,放在Acitvity类中 class MyClickListener implements View.OnClickListener{ @override public void onClick(View v){ DisplayToast("事件触发器"); } }
-
外部类作为事件监听器类
//新建一个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)); }
-
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("事件触发成功"); } } }
如果觉得本文对你有帮助的话,不妨关注作者一波,小小的关注其实对我很重要。更多高质量内容与资料请访问:个人主页:修心的小屋
以上是关于Android界面开发的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段
Android课程---Android Studio使用小技巧:提取方法代码片段
Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段