前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发基础:布局,监听以及一些基础知识

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

作者头像
小王不头秃
发布2024-06-19 15:12:36
1200
发布2024-06-19 15:12:36
举报
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();
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Android开发基础:布局,监听以及一些基础知识
  • 布局
    • LinearLayout:线性布局
      • RelativeLayout:相对布局
      • 基础知识
        • gravity:
          • weight:
            • RadioGroup
              • Swtich
                • ToggleButton
                  • SeekBar(进度条)
                    • adpter
                      • 监听
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档