Android开发基础:布局,监听以及一些基础知识

2024-06-19 15:12:36 浏览数 (3)

Android开发基础:布局,监听以及一些基础知识

布局

代码语言:javascript复制
android:id="@ id/textone"       //设置id
LinearLayout:线性布局
代码语言:javascript复制
android:layout_width="match_parent"
android:layout_height="match_parent"

android:layout_width/android:layout_height可选参数

match_parent:宽度和高度匹配上一级,最外层的上一级是屏幕

wrap_content:匹配下一级,下一级多大,他多大

fill_parent:已废弃

固定数值:单位通常使用dp dp可以根据像素密度进行匹配

android:background="#485454":设置背景颜色

android:orientation="" :设置线性布局的方向

可选值:

horizontal:水平的

vertical:垂直的

android:padding="":内边距

android:layout_margin="":外边距

android:layout_gravity="":重力方向

可选值:

top。。。。。。。。。等等

RelativeLayout:相对布局
代码语言:javascript复制
 <TextView
        android:background="#67002B"
        android:id="@ id/textone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name" 
        />
<!-- 可以做到相对位置 -->
    <TextView
        android:layout_toRightOf="@ id/textone"   
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/text_value" 
        />

android:layout_centerInParent=“true”:设置为父级的中心

代码语言:javascript复制
setContentView(R.layout.activity_main);    //设置布局文件

基础知识

gravity:
代码语言:javascript复制
android:gravity="center"    //设置组件内部的重力方向
android:layout_gravity="center"   //设置组件在父组件的位置
weight:

用于按照权重的比值设置宽和高的比例,只能应用于线性布局

给那个属性设置权重,就给这个属性设置0dp

代码语言:javascript复制
android:layout_weight="1"
RadioGroup

单选框

xml中设置放方式

代码语言:javascript复制
   <RadioGroup
        android:id="@ id/radiogroup"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="horizontal">

        <RadioButton
            android:id="@ id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="male"></RadioButton>

        <RadioButton
            android:id="@ id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="feamle"></RadioButton>

    </RadioGroup>
    <Button
        android:id="@ id/buttontwo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击"
        ></Button>

RadioGroup需要设置一个id,从而对其进行监听,每一个RadioButton都需要设置id,方便获取它的值

为RadioGroup值改变时添加一个监听器

代码语言:javascript复制
RadioGroup radgroup = (RadioGroup) findViewById(R.id.radiogroup);
        //第一种获得单选按钮值的方法
        //为radioGroup设置一个监听器:setOnCheckedChanged()
        radgroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                RadioButton radbtn = (RadioButton) findViewById(checkedId);
                Toast.makeText(getApplicationContext(), "按钮组值发生改变,你选了"   radbtn.getText(), Toast.LENGTH_LONG).show();
            }
        });

为button设置一个监听,来获取RadioGroup的选择值

代码语言:javascript复制
  Button viewById = findViewById(R.id.buttontwo);
        viewById.setOnClickListener(new View.OnClickListener() {
            RadioGroup radgroup = (RadioGroup) findViewById(R.id.radiogroup);
            @Override
            public void onClick(View v) {
                RadioButton viewById1 = findViewById(radgroup.getCheckedRadioButtonId());
                Toast.makeText(getApplicationContext(), "点击事件"   viewById1.getText(), Toast.LENGTH_LONG).show();
            }
        });
Swtich

一个开关

xml

代码语言:javascript复制
   <Switch
        android:id="@ id/swh_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff=""
        android:textOn=""
    />

监听响应

代码语言:javascript复制
 Switch viewById1 = findViewById(R.id.swh_status);
        viewById1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(buttonView.isChecked())
                    Toast.makeText(getApplicationContext(),"on",Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(getApplicationContext(),"off",Toast.LENGTH_SHORT).show();
            }
        });
ToggleButton

一个按钮,点击过程中会自动变换值

xml

代码语言:javascript复制
<ToggleButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOff="关闭"
    android:textOn="打开"
    android:id="@ id/toggle"
    ></ToggleButton>

java

代码语言:javascript复制
ToggleButton viewById = findViewById(R.id.toggle);
        viewById.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Toast.makeText(getApplicationContext(),buttonView.getText(),Toast.LENGTH_SHORT).show();
            }
        });
SeekBar(进度条)

xml

代码语言:javascript复制
<SeekBar
    android:id="@ id/sb_normal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"></SeekBar>
<!--该TextView仅作展示信息-->
<TextView
        android:id="@ id/txt_cur"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></TextView>

java

代码语言:javascript复制
public class MainActivity extends AppCompatActivity{
    private static Integer times=0;
    private SeekBar sb_normal;
    private TextView txt_cur;
    private Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.maintwo);
        ToggleButton viewById = findViewById(R.id.toggle);
        Switch viewById1 = findViewById(R.id.swh_status);
        viewById.setOnCheckedChangeListener(this);
        viewById1.setOnCheckedChangeListener(this);
        ImageView img_pgbar = (ImageView) findViewById(R.id.img_pgbar);
        final AnimationDrawable ad = (AnimationDrawable) img_pgbar.getDrawable();
        img_pgbar.postDelayed(new Runnable() {
            @Override
            public void run() {
                ad.start();
            }
        }, 1000);
        mContext = MainActivity.this;
        bindViews();
    }

    private void bindViews() {
        sb_normal = (SeekBar) findViewById(R.id.sb_normal);
        txt_cur = (TextView) findViewById(R.id.txt_cur);
        sb_normal.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                txt_cur.setText("当前进度值:"   progress   "  / 100 ");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                Toast.makeText(mContext, "触碰SeekBar", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                Toast.makeText(mContext, "放开SeekBar", Toast.LENGTH_SHORT).show();
            }
        });
    }
adpter

作用就是做一个listview与视图之间的适配器

list_model(作用就是自定义一个listview中的一个模板)

代码语言:javascript复制
<?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">
    <!-- 定义一个用于显示头像的ImageView -->
    <ImageView
        android:id="@ id/imgtou"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:baselineAlignBottom="true"
        android:paddingLeft="8dp" />

    <!-- 定义一个竖直方向的LinearLayout,把QQ呢称与说说的文本框设置出来 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@ id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="8dp"
            android:textColor="#1D1D1C"
            android:textSize="20sp" />

        <TextView
            android:id="@ id/says"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="8px"
            android:textColor="#B4B4B9"
            android:textSize="14sp" />

    </LinearLayout>

</LinearLayout>

activity_main.xml

代码语言:javascript复制
<?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_test"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:entries="@array/myarray"/>
</LinearLayout>

MainActivity

代码语言:javascript复制
package com.example.daytwo2021_6_8_2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private LinearLayout p1, p2, p3, p4, p5, p6, p7, p8;

    private String[] names = new String[]{"B神", "基神", "曹神"};
    private String[] says = new String[]{"无形被黑,最为致命", "大神好厉害~", "我将带头日狗~"};
    private int[] imgIds = new int[]{R.drawable.phone, R.drawable.ban, R.drawable.pc};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.maintwo);
        initview4();
    }

    private void initview4() {
        List<Map<String, Object>> listitem = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < names.length; i  ) {
            Map<String, Object> showitem = new HashMap<String, Object>();
            showitem.put("touxiang", imgIds[i]);
            showitem.put("name", names[i]);
            showitem.put("says", says[i]);
            listitem.add(showitem);
        }

        //创建一个simpleAdapter     
        //参数说明:主类,listView中对象的list,自定义的模板,list中map值,对应的id组件
        SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(), listitem, R.layout.list_model, new String[]{"touxiang", "name", "says"}, new int[]{R.id.imgtou, R.id.name, R.id.says});
        ListView listView = (ListView) findViewById(R.id.list_test);
        listView.setAdapter(myAdapter);
    }

 

}
监听

给控件设置一个监听器,监听器会一直监听某个事件的响应

当监听到事件变化就会调用回调函数

以点击事件为例学习监听器

1.给需要监听的控件设置一个id

2.java代码中设置监听

3.根据id找到监听的id(注意,这里寻找的id必须是你设置的布局里面的,不可以调用其他布局的id)

代码语言:javascript复制
 TextView viewById = findViewById(R.id.text1);

4.设置点击监听事件

代码语言:javascript复制
  viewById.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                times  ;
                if(times>5){
                    Toast.makeText(getApplicationContext(),"还点",Toast.LENGTH_SHORT).show();
                }
                else
                Toast.makeText(getApplicationContext(),"继续点",Toast.LENGTH_SHORT).show();
            }
        }); viewById.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                times  ;
                if(times>5){
                    Toast.makeText(getApplicationContext(),"还点",Toast.LENGTH_SHORT).show();
                }
                // 传入参数:外部类名称,显示文字,显示时长
                Toast.makeText(getApplicationContext(),"继续点",Toast.LENGTH_SHORT).show();
            }
        });

这边的onclick就是回调方法,即当监听到响应时被调用

有多个需要监听对象时,可以采用Activity继承处理监听的类,并且实现其中回调方法,根据响应对象的id来进行不同的操作

代码语言:javascript复制
public class MainActivity extends AppCompatActivity  implements CompoundButton.OnCheckedChangeListener{
    private static Integer times=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.maintwo);
        ToggleButton viewById = findViewById(R.id.toggle);
        Switch viewById1 = findViewById(R.id.swh_status);
        viewById.setOnCheckedChangeListener(this);
        viewById1.setOnCheckedChangeListener(this);

    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        switch (buttonView.getId()){
            case R.id.toggle:
                Toast.makeText(getApplicationContext(),"按钮",Toast.LENGTH_SHORT).show();
            case R.id.swh_status:
                Toast.makeText(getApplicationContext(),"开关",Toast.LENGTH_SHORT).show();
        }
    }
}

0 人点赞