Android 开发(03)基础UI组件

这篇博客详细介绍了Android开发中的基础UI组件,包括TextView的属性设置、特殊效果如阴影和边框,以及EditText的多种功能,如输入类型、行数控制、光标位置等。还探讨了按钮类控件如Button、ImageButton,以及日期类和计时器控件的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文本类控件

  • 几个像素相关单位
    • px::pixels(就是物理像素)
    • ppi:就是通过那个公式计算出来的物理像素密度
    • dpi:参考了物理像素密度后人为指定的一个值,这样使得某一个区间内的物理像素密度都是相同的dpi
    • dp:device independent pixels(设备独立像素),安卓中尺寸设置一般就用dp;dp 和 px 之间的换算关系是,设备是 160dpi 的话,1dp就等于1px,如果设备的dpi是320的话,1dp就等于2px;其实使用dp也不能做到完美适配所有的屏幕,要想很好适配尽可能多的设备比较好的方案就是使用ConstraintLayout布局,具体到尺寸和布局的话就使用百分比而不写死dp,这样屏幕的适配就比较完美了
    • sp:scaled pixels(放大像素),用于设置字体的大小

AS使用的一个小技巧:设置颜色的时候点击前面的显示颜色的方块可以唤出取色盘

一、TextView(文本框)

1、基础属性

  • 直接看示例代码,基本就是见名知义,没啥好说
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:gravity="center"
    android:background="#8fffad">

    <TextView
        android:id="@+id/txtOne"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:gravity="center"
        android:text="TextView(显示框)"
        android:textColor="#EA5246"
        android:textStyle="bold|italic"
        android:background="#000000"
        android:textSize="18sp" />

</RelativeLayout>

2、特殊效果实现

字间距、行间距、自动换行
  • 字间距的设置
android:textScaleX:控制字体水平方向的缩放,默认值1.0f,值是float
Java中setScaleX(2.0f); 
  • 行间距的设置
android:lineSpacingExtra:设置行间距,如"3dp" 
android:lineSpacingMultiplier:设置行间距的倍数,如"1.2"
Java代码中可以通过: setLineSpacing方法来设置
  • 自动换行
android:singleLine = "true" 设置为true 就是一行显示,false就是会自动换行
阴影效果
  • android:shadowColor:设置阴影颜色,需要与shadowRadius一起使用哦!
  • android:shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0
  • android:shadowDx:设置阴影在水平方向的偏移,就是水平方向阴影开始的横坐标位置
  • android:shadowDy:设置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:shadowColor="#F9F900"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:shadowRadius="3.0"
        android:text="带阴影的TextView"
        android:textColor="#4A4AFF"
        android:textSize="30sp" />

AS里面预览的界面是看不到阴影的效果的,需要将应用运行起来才能看到阴影

添加边框(ShapeDrawable资源文件)
  • shapeDrawable文件的详细说明
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:dither=["true" | "false"]       //将在位图的像素配置与屏幕不同时(例如:ARGB 8888 位图和 RGB 565 屏幕)启用位图的抖动;值为“false”时则停用抖动。默认值为 true。
    android:shape=["rectangle" | "oval" | "line" | "ring"]//分别为矩形、椭圆、线、环。默认为矩形rectangle 
    android:innerRadius="integer"           // shape为ring时有效,内环半径
    android:innerRadiusRatio="float"        // shape为ring时有效,内环的厚度比,即环的图形宽度与内环半径的比例,按照这个比例计算内环半径,默认为3,可被innerRadius值覆盖
    android:thickness="integer"             // shape为ring时有效,环的厚度
    android:thicknessRatio="float"          // shape为ring时有效,环的厚度比,即环的图形宽度与环的厚度的比例,按照这个比例计算环的厚度,默认为9,可被thickness值覆盖
    android:tint="color"                    // 给shape着色
    android:tintMode=["src_in" | "src_atop" | "src_over" | "add" | "multiply" | "screen"] // 着色类型
    android:useLevel=["true" | "false"]     // 较少用,一般设为false,否则图形不显示。为true时可在LevelListDrawable使用
    android:visible=["true" | "false"] >
    <!-- 圆角 -->
    <corners
        android:radius="integer"            // 圆角半径,设置下面四个属性时,对应的位置属性会被覆盖
        android:topLeftRadius="integer"     // 左上角圆角半径
        android:topRightRadius="integer"    // 右上角圆角半径
        android:bottomLeftRadius="integer"  // 左下角圆角半径
        android:bottomRightRadius="integer" // 右下角圆角半径
        />
    <!-- 渐变 -->
    <gradient
        android:type=["linear" | "radial" | "sweep"]// 渐变类型,线性、放射性、扫描性;默认为线性
        android:angle="integer"             // 渐变角度,渐变类型为linear时有效;默认为0,从左至右渐变,角度逆时针方向计算,角度需要时45的整数倍数
        android:centerColor="integer"       // 渐变中间位置颜色
        android:startColor="color"          // 渐变开始位置颜色
        android:endColor="color"            // 渐变结束位置颜色
        android:centerX="float"             // 设置渐变中心的X坐标,取值区间[0,1],默认为0.5,即中心位置
        android:centerY="float"             // 设置渐变中心的Y坐标,取值区间[0,1],默认为0.5,即中心位置
        android:gradientRadius="integer"    // type为放射性渐变radial时有效,渐变的半径
        android:useLevel=["true" | "false"] // 与shape中该属性的一致
        />
    <!-- 内边距 -->
    <padding
        android:left="integer"              // 左边距
        android:top="integer"               // 上边距
        android:right="integer"             // 右边距
        android:bottom="integer"            // 下边距
        />
    <!-- 大小 -->
    <size
        android:width="integer"             // 图形宽度
        android:height="integer"            // 图形高度
        />
    <!-- 填充 -->
    <solid
        android:color="color"               // 图形的填充色
        />
    <!-- 描边 -->
    <stroke
        android:width="integer"             // 描边的宽度
        android:color="color"               // 描边的颜色
        android:dashWidth="integer"         // 虚线宽度
        android:dashGap="integer"           // 虚线间隔
        />
</shape>
  • 圆角矩形边框的Drawable
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#87CEEB" />
    <stroke
        android:width="1px"
        android:color="#000000" />
    <corners
        android:bottomLeftRadius="10px"
        android:bottomRightRadius="10px"
        android:topLeftRadius="10px"
        android:topRightRadius="10px" />
    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" />
</shape>
  • 设置背景为相应shapeDrawable文件
<TextView
    android:id="@+id/txtTwo"
    android:layout_width="200dp"
    android:layout_height="64dp"
    android:layout_marginTop="10dp"
    android:textSize="18sp"
    android:gravity="center"
    android:background="@drawable/txt_radiuborder"
    android:text="圆角边框的TextView" />
带图片的TextView

在这里插入图片描述

  • drawableXXX分别设置上下左右的图片
  • 使用drawablePadding来设置图片与文字间的间距
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:drawableTop="@drawable/fg"
        android:drawableLeft="@drawable/fg"
        android:drawableRight="@drawable/fg"
        android:drawableBottom="@drawable/fg"
        android:drawablePadding="50dp"
        android:text="跑动的妹纸" />
  • 图片的大小只能通过 java 代码调节
public class MainActivity extends AppCompatActivity {
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.tv1);
        Drawable[] drawable = textView.getCompoundDrawables();
        // 数组下表0~3,依次是:左上右下
        drawable[1].setBounds(0, 0, 200, 200);
        textView.setCompoundDrawables(drawable[0], drawable[1], drawable[2],
                drawable[3]);
    }
}
TextView内容插入html
  • 不是支持所有的html标签,常用的有下述这些
<font>:设置颜色和字体。
<big>:设置字体大号
<small>:设置字体小号
<i><b>:斜体粗体
<a>:连接网址
<img>:图片
  • html 的嵌入要靠 java 代码来实现
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t1 = (TextView)findViewById(R.id.txtOne);
        String s1 = "<font color='blue'><b>百度一下,你就知道~:</b></font><br>";
        s1 += "<a href = 'http://www.baidu.com'>百度</a>";
        t1.setText(Html.fromHtml(s1));
        t1.setMovementMethod(LinkMovementMethod.getInstance());//激活链接
    }
}
实现部分可点击的TextView
  • 使用SpannableString和SpannableStringBuilder也可以用来定制文本,前者针对的是不可变文本,而后者则是针对可变文本
  • SpannableString提供了很多类似 ClickableSpan、ImageSpan 的API来让我们可以对文字进行修饰,下面就是利用ClickableSpan 实现部分可点击TextView 的代码
  • 具体的使用就是TextView设置文本的时候以前是直接设置一个String,现在改成SS和SSB了,通过二者的setSpan方法,我们可以对文字进行一些处理修饰
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t1 = (TextView) findViewById(R.id.txtOne);

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 20; i++) {
            sb.append("好友" + i + ",");
        }

        String likeUsers = sb.substring(0, sb.lastIndexOf(",")).toString();
        t1.setMovementMethod(LinkMovementMethod.getInstance());
        t1.setText(addClickPart(likeUsers), TextView.BufferType.SPANNABLE);
    }

    //定义一个点击每个部分文字的处理方法
    private SpannableStringBuilder addClickPart(String str) {
        //赞的图标,这里没有素材,就找个笑脸代替下~
        ImageSpan imgspan = new ImageSpan(MainActivity.this, R.drawable.ic_widget_face);
        SpannableString spanStr = new SpannableString("p.");
        spanStr.setSpan(imgspan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

        //创建一个SpannableStringBuilder对象,连接多个字符串
        SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr);
        ssb.append(str);
        String[] likeUsers = str.split(",");
        if (likeUsers.length > 0) {
            for (int i = 0; i < likeUsers.length; i++) {
                final String name = likeUsers[i];
                final int start = str.indexOf(name) + spanStr.length();
                ssb.setSpan(new ClickableSpan() {
                    @Override
                    public void onClick(View widget) {
                        Toast.makeText(MainActivity.this, name,
                                Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void updateDrawState(TextPaint ds) {
                        super.updateDrawState(ds);
                        //删除下划线,设置字体颜色为蓝色
                        ds.setColor(Color.BLUE);
                        ds.setUnderlineText(false);
                    }
                },start,start + name.length(),0);
            }
        }
    return ssb.append("等" + likeUsers.length + "个人觉得很赞");
    }
}
实现跑马灯效果的TextView
<TextView
        android:id="@+id/txtOne"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="你整天说着日了狗日了狗,但是你却没有来,呵呵呵呵呵呵呵呵呵呵~"/>

 

二、EditText(编辑框)

1.设置提示文本

  • 第一个属性设置内容,第二个设置颜色
android:hint="默认提示文本"
android:textColorHint="#95A1AA"

编辑框的左边设置一个图片android:drawableLeft="...."

2.EditText输入类型

  • 文本类型
android:inputType="none"  
android:inputType="text"  
android:inputType="textCapCharacters"  
android:inputType="textCapWords"  
android:inputType="textCapSentences"  
android:inputType="textAutoCorrect"  
android:inputType="textAutoComplete"  
android:inputType="textMultiLine"  
android:inputType="textImeMultiLine"  
android:inputType="textNoSuggestions"  
android:inputType="textUri"  
android:inputType="textEmailAddress"  
android:inputType="textEmailSubject"  
android:inputType="textShortMessage"  
android:inputType="textLongMessage"  
android:inputType="textPersonName"  
android:inputType="textPostalAddress"  
android:inputType="textPassword"  
android:inputType="textVisiblePassword"  
android:inputType="textWebEditText"  
android:inputType="textFilter"  
android:inputType="textPhonetic" 
  • 数值类型
android:inputType="number"  
android:inputType="numberSigned"  
android:inputType="numberDecimal"  
android:inputType="phone"//拨号键盘  
android:inputType="datetime"  
android:inputType="date"//日期键盘  
android:inputType="time"//时间键盘

4.设置行数最大最小值、显示行数、单行显示

android:minLines="3"  //设置最小行的行数
android:maxLines="3"  //或者设置EditText最大的行数
android:singleLine="true"
android:lines="3"

5.设置文字间隔、英文字母大写类型

android:textScaleX="1.5"    //设置字与字的水平间隔
android:textScaleY="1.5"    //设置字与字的垂直间隔

android:capitalize="none"   
//sentences:仅第一个字母大写
//words:每一个单词首字母大写,用空格区分单词
//characters:每一个英文字母都大写

6.EditText的margin和padding使用

7.设置EditText获得焦点,同时弹出小键盘

  • 让EditText获得焦点与清除焦点的
edit.requestFocus(); //请求获取焦点
edit.clearFocus(); //清除焦点
  • windowSoftInputMode这个属性能影响两件事情:
    • 当有焦点产生时,软键盘是隐藏还是显示
    • 是否减少活动主窗口大小以便腾出空间放软键盘
-------------windowSoftInputMode相应的属性值-------------
stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
stateHidden:用户选择activity时,软键盘总是被隐藏
stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
stateVisible:软键盘通常是可见的
stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
  • 最终实现代码
EditText editText = (EditText)findViewById(R.id.et1);
editText.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

8.EditText光标位置控制

  • EditText为我们提供了 setSelection() 的方法,方法有两种形式
    • 一个参数的是设置光标位置的
    • 两个参数的是设置起始位置与结束位置的中间部分,即部分选中
  • setSelectAllOnFocus(true):让EditText获得焦点时选中全部文本
  • setCursorVisible(false):设置光标不显示
  • getSelectionStartgetSelectionEnd:获得当前光标的前后位置

9.EditText中添加图片

  • 使用 SpannableStringImageSpan 来实现类似微信添加表情的功能
public class MainActivity extends AppCompatActivity {
    private Button btn_add;
    private EditText edit_one;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_add = (Button) findViewById(R.id.but1);
        edit_one = (EditText) findViewById(R.id.et5);
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SpannableString spanStr = new SpannableString("imge");
                Drawable drawable = MainActivity.this.getResources().getDrawable(R.drawable.fg);
                drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
                ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
                spanStr.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                int cursor = edit_one.getSelectionStart();
                edit_one.getText().insert(cursor, spanStr);
            }
        });
    }
}

10.带删除按钮的EditText

  • 为EditText设置addTextChangedListener,然后重写TextWatcher()里的抽象方法,这个用于监听输入框变化的;
  • 然后setCompoundDrawablesWithIntrinsicBounds设置小叉叉的图片;
  • 最后重写onTouchEvent方法,如果点击区域是小叉叉图片的位置,清空文本
@SuppressLint("AppCompatCustomView")
public class EditTextWithDel extends EditText {

    private final static String TAG = "EditTextWithDel";
    private Drawable imgInable;
    private Drawable imgAble;
    private Context mContext;

    public EditTextWithDel(Context context) {
        super(context);
        mContext = context;
        init();
    }

    public EditTextWithDel(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    public EditTextWithDel(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        init();
    }

    private void init() {
        imgInable = mContext.getResources().getDrawable(R.drawable.mess);
        addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                setDrawable();
            }
        });
        setDrawable();
    }

    // 设置删除图片
    private void setDrawable() {
        if (length() < 1)
            setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
        else
            setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
    }

    // 处理删除事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (imgInable != null && event.getAction() == MotionEvent.ACTION_UP) {
            int eventX = (int) event.getRawX();
            int eventY = (int) event.getRawY();
            Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
            Rect rect = new Rect();
            getGlobalVisibleRect(rect);
            rect.left = rect.right - 100;
            if (rect.contains(eventX, eventY))
                setText("");
        }
        return super.onTouchEvent(event);
    }
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}

按钮类控件

一、普通按钮(Button)

1、按钮绑定点击事件

通过java中用匿名内部类实现
  • 就是直接设置 OnClickListener
通过onClick属性实现
  • 首先在 activity 里面写一个处理的方法
  • 然后直接在onClick 属性里面调用方法即可
消消乐登录界面练习总结
  • drawable 文件夹里面还有一个V24,android7.0版本以下是找不到v24目录下面的资源的,所以最好复制一份到v24之外
  • 应用发生意外退出的话,一定要到AS的run窗体查看报错的信息以解决问题

二、ImageButton(图像按钮)

  • 图片按钮设置背景全透明background =#0000,这样看起来会比较美观

1.StateListDrawable简介

  • StateListDrawable是Drawable资源的一种,可以根据组件的不同状态设置不同的效果
  • 只需将Button的background属性设置为该drawable资源即可轻松实现按钮不同状态下显示不同样式
  • 相关的属性说明如下
drawable:引用的Drawable位图
//下面的就是各种状态属性
state_focused:是否获得焦点
state_window_focused:是否获得窗口焦点
state_enabled:控件是否可用
state_checkable:控件可否被勾选,eg:checkbox
state_checked:控件是否被勾选
state_selected:控件是否被选择,针对有滚轮的情况
state_pressed:控件是否被按下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/me"/>
    <item android:state_enabled="false" android:drawable="@drawable/fg"/>
    <item android:drawable="@drawable/mess"/>
</selector>

2.StateListDrawable使用示范

  • state_list.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/bbutton_danger_pressed" />
            <stroke android:width="1dp" android:color="@color/bbutton_danger_edge" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius" />
        </shape>
    </item>

    <item android:state_enabled="false">
        <shape>
            <solid android:color="#A8A3A3" />
            <stroke android:width="1dp" android:color="#A8A3A3" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius" />
        </shape>
    </item>

    <item>
        <shape>
            <solid android:color="#03A9F4" />
            <stroke android:width="1dp" android:color="#03A9F4" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius" />
        </shape>
    </item>
</selector>
  • 布局文件
<Button
	android:id="@+id/btn"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:background="@drawable/state_list"
	android:text="Button" />

<Button
	android:id="@+id/func"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="click me" />
  • MainActivity
public class MainActivity extends AppCompatActivity {
    private boolean flag = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button button = (Button) findViewById(R.id.btn);
        final Button button2 = (Button) findViewById(R.id.func);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (flag) {
                    button.setEnabled(false);
                    flag = false;
                } else {
                    button.setEnabled(true);
                    flag = true;
                }
            }
        });

    }
}

 

三、单选按钮&复选框

  • 这两个东东和 html 中的 radio 和 checkbox不是很像吗

1、单选按钮

  • 单选按钮RadioButton 需要用RadioGroup 来包裹才能保证只能选中一个
  • 单选按钮可以添加选中变化的事件监听
用单选按钮实现逻辑推理题
  • 布局文件
<RadioGroup
        android:id="@+id/rg1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:paddingLeft="10dp">
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="A.为人民服务原则" />
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="B.民主集中制原则"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="C.社会主义法制原则"/>
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="D.精简原则"/>
    </RadioGroup>
  • Activity
public class MainActivity extends AppCompatActivity {
    RadioGroup rg;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rg = (RadioGroup) findViewById(R.id.rg1);
        Button button = findViewById(R.id.but1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0;i < rg.getChildCount();i ++){
                    RadioButton rb = (RadioButton) rg.getChildAt(i);
                    if(rb.isChecked()){
                        if(rb.getText().equals("B.民主集中制原则")){
                            Toast.makeText(MainActivity.this,"你的答案是正确的,就是B选项",Toast.LENGTH_LONG).show();
                        }else{
                            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                            builder.setMessage("正确的答案应该是B选项");
                            builder.setPositiveButton("确定",null).show();
                        }
                        break;
                    }
                }
            }
        });
    }
}

2、复选框(Checkbox):不用 group 包裹

 

四、开关按钮&开关

  • ToggleButton(开关按钮) & Switch(开关)
<ToggleButton
	android:id="@+id/tbtn_open"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:textOn="myon"
	android:textOff="myoff"
	android:alpha="0.4"/>

<Switch
	android:id="@+id/swh_status"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content" />
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);

	tbtn_open = (ToggleButton) findViewById(R.id.tbtn_open);
	swh_status = (Switch) findViewById(R.id.swh_status);
	tbtn_open.setOnCheckedChangeListener(this);
	swh_status.setOnCheckedChangeListener(this);
}

@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
	switch (compoundButton.getId()){
		case R.id.tbtn_open:
			if(compoundButton.isChecked()) Toast.makeText(this,"打开声音",Toast.LENGTH_SHORT).show();
			else Toast.makeText(this,"关闭声音",Toast.LENGTH_SHORT).show();
			break;
		case R.id.swh_status:
			if(compoundButton.isChecked()) Toast.makeText(this,"开关:ON",Toast.LENGTH_SHORT).show();
			else Toast.makeText(this,"开关:OFF",Toast.LENGTH_SHORT).show();
			break;

	}
}

日期类控件

一、日期时间选择器

  • datepicker
final DatePicker datePicker = (DatePicker)findViewById(R.id.dp);
Calendar calendar = Calendar.getInstance();
datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
		calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {
	@Override
	public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
		String timeStr = datePicker.getYear()+"-"+datePicker.getMonth()+"-"+datePicker.getDayOfMonth();
		Toast.makeText(MainActivity.this,"你选的日期是"+timeStr,Toast.LENGTH_SHORT).show();
	}
});
  • timepicker
TimePicker tp_test = (TimePicker) findViewById(R.id.tp_test);
tp_test.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
	@Override
	public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
		Toast.makeText(MainActivity.this,"您选择的时间是:"+hourOfDay+"时"+minute+"分!",Toast.LENGTH_SHORT).show();
	}
});

二、计时器(chronometer)

1、几个重要方法

  • setBase :设置计时器的起始时间
  • setFormat : 设置时间格式
  • start : 开始计时
  • stop : 停止计时
  • setOnChronometerTickListener : 绑定时间改变的监听器

2、计时器示例

  • 布局文件
<Chronometer
    android:id="@+id/haha"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginRight="20dp"
    android:layout_marginTop="30dp"
    android:textColor="#fff"/>
  • java代码
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Chronometer chronometer = (Chronometer) findViewById(R.id.haha);
        chronometer.setBase(SystemClock.elapsedRealtime());
        chronometer.setFormat("%s");
        chronometer.start();
        chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
            @Override
            public void onChronometerTick(Chronometer chronometer) {
                if(SystemClock.elapsedRealtime()-chronometer.getBase()>10000){
                    chronometer.stop();
                }
            }
        });
    }

9patch图报 invalid color 问题:就是没有黑边导致的,画上黑边就可以了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值