学习《第一行代码》(六)

程序界面(UI)——控件

1.TextView(文本框)
属性用途备注
android:id唯一标识
android:layout_height高度自定义(单位dp)
match_parent(与父布局相同)
wrap_content(由控件内容决定控件大小)
android:layout_width宽度自定义(单位dp)
match_parent(与父布局相同)
wrap_content(由控件内容决定控件大小)
android:gravity对齐方式以下都可以用 | 来组合:
top(上)
bottom(下)
left(左)
right(右)
center(居中)
center_horizontal(水平居中)
center_vertical(垂直居中)
clip_horizontal(超出控件左右两边的剪掉)
clip_vertical(超出控件上下两边的剪掉)
fill(充满整个控件)
fill_horizontal(水平充满)
fill_vertical(垂直充满)
start/end(与阅读顺序相关)
android:textSize字体大小单位(sp)
android:textColor字体颜色有很多就不列举了

举例:

    <TextView
        android:id="@+id/textView"
        android:layout_width="278dp"
        android:layout_height="316dp"
        android:gravity="bottom|left"
        android:text="I just want to have a test,TextView"
        android:textColor="#00ff00"
        android:textSize="40sp"
 />

效果:
Alt text

2.Button

属性与TextView差不多,text为英文的话会默认自动转换成大写英文,想关闭则``android:textAllCaps="false `即可。
设置完按钮的布局,还需要添加监听器,这样按下按钮才会有响应,有两种方法:
①在对应活动的java文件中添加监听器,如:

	@Override
	protected void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.activity_second);
	    Button button3 = (Button) findViewById(R.id.button3);
	    button3.setOnClickListener(new View.OnClickListener() {
	        @Override
	        public void onClick(View v) { //在此处添加逻辑
	            Intent intent = new Intent(SecondActivity.this,
		            ThirdActivity.class);
	            startActivity(intent);
	        }
	    });
	}

②用实现接口的方式来注册监听器,如:
Alt text
(在试用的时候不知道为什么会出现异常情况让我退出APP,个人还是比较喜欢用第一种方法)

3.EditText(用于与用户交互)

在Android Studio 中有很多Text的控件
Alt text

我在这尝试设置了几个控件,但用模拟器运行发现会都叠在左上角
Alt text

发现是布局问题,相对布局默认是重叠在一起的。我是按了一下Infer Constraints即可
Alt text

效果:
Alt text

4.ImageView

用于展示图片,资源一般放在drawtable中。
举例:
①先在res下新建一个目录drawable-xhdpi,把选好的两张图片放入此目录中
(我是直接找到这个项目文件夹然后新建文件夹添加图片的路径:ActivityTest–>appsrc–>main–>
res–>drawable-xhdpi)
②在activity-third中添加ImageView控件(我是通过添加代码来添加控件,然后手动拖动控件调整位置)

<ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="194dp"
        android:layout_marginTop="72dp"
        android:src="@drawable/img_2"       //这里即表示要显示的图片
        app:layout_constraintTop_toBottomOf="@+id/button"
        tools:layout_editor_absoluteX="0dp" 
        />

按钮响应事件为换一张(记录点击次数,奇数就显示img_1,偶数img_2)
③效果

Alt textAlt text

5.ProgressBar(进度条)

有正常的直的进度条和圆形进度条,style="?android:attr/progressBarStyleHorizontal"则指定为水平进度条,通过setProgress()来设置进度。
通过
android: visibility
来控制是否可见,三个可选,不指定时默认可见

效果
visible可见
invisible不可见但占用屏幕空间
gone不可见且不占用屏幕空间
6.AlertDialog(提示对话框)

此对话框为置顶于所有界面元素之上,能屏蔽其他空间的交互功能,一般用于提示重要信息。
举例:这里当进度条满了之后再按按钮将会出现提示

	progressBar1.setVisibility(View.INVISIBLE);
	AlertDialog.Builder dialog = new AlertDialog.Builder(ThirdActivity.this);
	dialog.setTitle("提示");						//对话框标题
	dialog.setMessage("Something important.");	 //提示内容
	dialog.setCancelable(false);
	//如果没有这行则默认为true,则不需要点下面设置的按钮就能退出
	dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
	//"确定"按钮点击事件setPositiveButton
		@Override
	    public void onClick(DialogInterface dialog, int which) {
	    //可自行设置逻辑
	    }
	});
	dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
	//"取消"按钮点击事件setNegativeButton
		@Override
	    public void onClick(DialogInterface dialog, int which) {
	    //可自行设置逻辑
	    }
	});
	dialog.setNeutralButton("忽略", new DialogInterface.OnClickListener() {
	    @Override
	    public void onClick(DialogInterface dialog, int which) {
		//可自行设置逻辑
	    }
	});
	dialog.show();//显示对话框

效果:
Alt text

7.ProgresssDialog

类似AlertDialog对话框,但ProgressDialog会显示圆形进度条,我想试试看效果可是一直显示Cannot resolve symbol “ProgressDialog”,经过查询发现说是在API level 26 中,ProgressDialog被声明不赞成使用,应使用的替代方法是ProgressBar,所以就没有再进行尝试了。

8.ListView(可通过滚动方式查看频幕外数据)

常用属性:

属性名用途
android:divider列表之间绘制的颜色或者图片,不需要则设置为**"@null"**
android:dividerHeightdivider 的高度
android:stackFromBottom内容从底部开始显示,默认false 从顶部开始显示
android:transcriptMode设置列表添加新的选项的时候,是否自动滑动到底部,显示新的选项(默认为disabled,也可选择normal或者alwaysScroll)

常用方法:

方法名用途
setEmptyView(View)设置ListView没有数据时展示的布局
setHeaderView()添加一个/多个头部布局(动态加载)
setFooterView()添加一个/多个尾部布局(动态加载)

关于适配器(都是继承 BaseAdapter这个抽象类的):

适配器释义
ArrayAdapter使用最为简单,以数据集合为基础,只显示一行文本
SimpleAdapter具有很好的扩展性,可以自定义出各种各样的布局
SimpleCursorAdapter可以方便的把数据库的内容通过列表的形式展现出来

简单举例

1.用ArrayAdapter(一行文本)

①将ListView控件占满整个布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/List_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</LinearLayout>

②在对应的java文件中给一些数据,通过适配器传递给ListView显示

public class FifthActivity extends AppCompatActivity {
    private String[] data = {"a","b","c","d","e","f","g","h","i","j",
							    "k","l","m","n","o","p","q","r","s","t"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fifth);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                FifthActivity.this,android.R.layout.simple_list_item_1,
															        data);
        ListView listView = (ListView) findViewById(R.id.List_view);
        listView.setAdapter(adapter);
    }
}

③效果:

2.用SimpleAdapter(自定义出各种各样的布局)

①提前创建一个layout用于放单独一个item所需要的控件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/words_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/words_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="52dp"
        android:layout_toRightOf="@+id/words_item"
        />

</RelativeLayout>

②在java文件中加适配器,把相匹配的(图片,文字)与①连接:

public class FifthActivity extends AppCompatActivity {
	//文字
    private String[] data = {"a","b","c","d","e","f","g","h","i","j",
					    "k","l","m","n","o","p","q","r","s","t"};
	//图片
    private int[] image = {R.drawable.a,R.drawable.b,R.drawable.c,
					    R.drawable.d,R.drawable.e,R.drawable.f,
					    R.drawable.g,R.drawable.h,R.drawable.i,
					    R.drawable.j,R.drawable.k,R.drawable.l,
					    R.drawable.m,R.drawable.n,R.drawable.o,
					    R.drawable.p,R.drawable.q,R.drawable.r,
					    R.drawable.s,R.drawable.t};
	//定义适配器对象
    private List<Map<String,Object>> list_map = new 
								ArrayList<Map<String,Object>>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fifth);
        ListView listView = (ListView) findViewById(R.id.List_view);
        for (int i = 0;i<20;i++){
            Map<String,Object> item = new HashMap<String, Object>();
            //创建一个键值对的Map集合,用来存放文字和图片
            item.put("小写",data[i]);
            //放入文字
            item.put("大写",image[i]);
            //放入图片
            list_map.add(item);
            //把存好的Map集合放入list中
        }

		//创建SimpleAdapter适配器
        SimpleAdapter simpleAdapter = new SimpleAdapter(
							FifthActivity.this,//传入一个上下文作为参数
							list_map,//数据源,文字+图片
	                        R.layout.words_item,//提前创建好的layout
	                        new String[]{"小写","大写"},//传入上面相同的键值
	                        new int[]{R.id.words_name,R.id.words_item});
	                        //传入对应控件id
        listView.setAdapter(simpleAdapter);//设置为ListView加入适配器
        //添加点击子项事件
        listView.setOnItemClickListener(
					        new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, 
								            int position, long id) {
                Toast.makeText(FifthActivity.this,
                "This is " + data[(int)id],Toast.LENGTH_SHORT).show();
            }
    }
}

③运行效果:

个人觉得《第一行代码》中的举例有点杂,所以找了篇博客来模仿
大神的博客

3.用SimpleCursorAdapter(可展示数据库的内容)

这个没有尝试,找了篇博客
博客在此

补充

在找RecyclerView的过程中发现了万能适配器这个说法,然后就找了一下,果然也有ListView的万能适配器,在这就先不深入,看完基础再回头深入
万能适配器

9.RecyclerView(ListView的进阶版)

由于RecyclerView内容比较多单独拿出来作为一篇
RecyclerView(ListView的进阶版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值