Android原生基础控件

view:

处理文本内容(TextView)、点击(Button)、处理图片内容(ImageView)、接收用户信息输入(EditView)、进度条类(ProgressBar)

控件的通用属性

属性常用可选值
android:layout_width、android:layout_heightmatch_parent 填充整个父容器、wrap_content 根据所含内容确定、正整数单位dp,精确大小
android:id@id/valName 使用已存在id、@+id/valName添加新的id
android:layout_margin、android:padding正整数单位dp,精确大小
android:background十六进制颜色值,颜色作为背景,@mipmap/reaourceID图片作为背景
android:layout_gravity、android:gravitycenter_horizontal水平居中、center_vertical垂直居中、center水平垂直居中、left居左、right居右、top居顶、bottom居底
android:visibilityvisible 可见状态、invisible 不可见状态但保留控件位置、gone不可见状态也不保留位置

1.TextView

android:textSize="22sp"//设置字体大小

android:textColor="#00ffff"//设置颜色

android:lineSpaceMultiolier="2"//字倍距

ScorllView滚动条(但是只能放一个控件)

android:singleLine="true"//设置单行

android:focusable="true"//设置可以获得焦点

android:ellipsize="start"//设置省略号位置

android:focusableInTouchMode="true"//设置在触摸时获得焦点

android:marqueeRepeatLinit="marquee_forever"//设置跑马灯时长

2.EditView

android:inputType//输入情况、如:text、textpassworf

android:hint//输出提示

android:maxLength//最大长度

android:autofillHints //是 Android 8.0(API 级别 26)及以上版本引入的一个重要属性,其主要作用是为自动填充系统提供明确的提示信息,从而让系统能够准确识别界面元素所期望填充的数据类型。通过合理使用该属性,用户可以更便捷地完成表单填写,无需手动输入重复信息。

android:contentDescription//主要功能是为界面元素提供文本描述,从而方便视力障碍用户借助屏幕阅读器理解元素用途。

3.ImageView

用来显示和控制图像的控件,可以对他进行放大、缩小、旋转等操作,常用属性有src、background

android:src=""//指定前景图片资源,图片不会变形
​
android:background=""//设置背景,图片可能会变形

4.Button

4.1.注册点击事件的方法

自定义内部类、匿名内部类、当前Activity去实现事件接口、在布局文件中添加点击事件属性

自定义内部类

@Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        Button btn1 = findViewById(R.id.btn1);
         myListener ml = new myListener();
        btn1.setOnClickListener(ml);
    }
​
    class myListener implements View.OnClickListener{
​
        @Override
        public void onClick(View v) {
            Log.e("TAG", "点击");
        }
    }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
​
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="自定义内部类"/>
​
</LinearLayout>

4.2.匿名内部类//适用于有唯一的操作的按钮

Button btn2 = findViewById(R.id.btn2);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("TAG", "onClick:匿名 " );
            }
        });
<Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="匿名内部类"/>

4.3.事件(当前Activity去实现事件接口)

public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        Button btn3 =findViewById(R.id.btn3);
        btn3.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        Log.e("TAG", "onClick:本类 " );
    }
    }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <Button
        android:id="@+id/btn3"
        android:layout_marginTop="40dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="本类实现"/>
</LinearLayout>

4.4.xml点击事件

//(View v)参数,被点击的控件对象
public void myClick (View v){
        Log.e("TAG", "instance initializer: xml");
    }
<Button
        android:layout_marginTop="40dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="myClick"
        android:text="xml实现"/>

5.ProgressBar

进度条,默认情况下是圆形,没有刻度,只是一个不断旋转的动画效果,通过设置style,可以显示传统的水平带刻度进度条

初始:

<ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

一条线:

<ProgressBar
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"//样式设置
        android:progress="50"//进度条的进度,默认是100,但可以通过android:max=“”修改默认
        //android:indeterminate="true"进度条滚动
        />

可以采用java线程来实现进度条递进

 ProgressBar pb = findViewById(R.id.progress_time);
        new Thread(){
            public void run(){
                for(int i=0;i<=100;i++){
                    pb.setProgress(i);
                }
                try {
                    Thread.sleep(1000000000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }.start();
<ProgressBar
        android:id="@+id/progress_time"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"
        />

控件例子,点击按钮后,判断登录账号密码是否为空

package com.example.myapplication;
​
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
​
import androidx.appcompat.app.AppCompatActivity;
​
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle saveInstanceState){
        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
//        Button btn1 = findViewById(R.id.login_btn1);
​
    }
    public void login_click(View v){
        Log.e("TAG", "执行成功");
        EditText name = findViewById(R.id.name);
        EditText password = findViewById(R.id.password);
        String nan = name.getText().toString();
        String pwd = password.getText().toString();
        if(nan.equals("") || pwd.equals("")){
            Toast.makeText(this,"账号或密码不能为空",Toast.LENGTH_SHORT).show();
            Log.e("TAG", "login: 账号密码不能空");
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
    android:layout_marginTop="40dp"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:src="@mipmap/ic_launcher"/>
    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:inputType="text"
        android:text="name"
        android:autofillHints="name" />
    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:inputType="textPassword"
        android:text="password"
        android:autofillHints="password" />
    <Button
        android:id="@+id/login_btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="login_click"
        android:text="点击事件"/>
</LinearLayout>

6.CheckBox

1.系统封装的复选控件

2.两种状态:选中及未选中setChecked() isChecked();

3.监听状态变化:setOnCheckedChangeListener

CheckBox cb = findViewById(R.id.checkbox);
        //设置是否选中状态
        cb.setChecked(false);
        //获取他的状态
        boolean isChecked = cb.isChecked();
<CheckBox
        android:id="@+id/checkbox"
        android:layout_width="100dp"
        android:layout_height="40dp"
        android:text="nihao"
        />

监听变化

cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d("TAG", "onCheckedChanged: "+isChecked);
            }
        });

7.RadioButton

1.单选控件

2.可以和RadioGroup一起使用,只能选择一个

使用例子:

<RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="nihao"/>
        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="buhao"/>
    </RadioGroup>

8.ToggleButton

1.切换程序中的状态

2.两种状态

(1)android:textOn

(2)android:textOff

3.setChecked(boolean)

setOnCheckedChangeListener

例子:

<ToggleButton
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:textOn="nihao"
        android:textOff="buhao"
        android:checked="true"
        />

在setChecked(boolean)和setOnCheckedChangeListener中使用有点类似于checkbox,不再次说明。

<think>好的,用户想了解Android原生的CalendarView控件的详细用法和相关文档。首先,我需要确认用户的需求。他们提到了原生控件,所以应该不是第三方库,比如提到的com.haibin.calendarview或者kizitonwose/CalendarView。但用户提供的引用中提到了这两个库,可能需要区分清楚。 首先,我需要回忆Android原生CalendarView的基本信息。原生CalendarView是在Android API level 11(Android 3.0)中引入的,用于显示一个月的日历,允许用户选择日期。不过,原生控件可能功能有限,不像第三方库那样功能丰富。比如,引用[1]和[2]提到的库可能有更多自定义选项,但用户明确询问的是原生控件,所以需要专注于官方的文档和用法。 接下来,用户需要详细用法和文档。我应该先给出基本用法,比如如何在XML布局中添加CalendarView控件,设置基本属性,然后在Activity中获取实例并设置监听器。同时,需要提到如何通过代码和XML属性进行自定义,比如日期范围、首日周、日期文本样式等。 需要注意的是,原生CalendarView的自定义选项可能有限,比如无法直接通过XML修改某些样式,可能需要通过Java/Kotlin代码或主题样式来调整。这时候可能需要提醒用户,如果需要更复杂的功能,可能需要使用第三方库,如引用中提到的那些。 另外,用户可能遇到的问题包括如何获取选中的日期,如何处理日期变化事件,如何设置最小和最大日期,以及如何调整外观。需要覆盖这些常见的使用场景,并提供代码示例,比如OnDateChangeListener的使用。 文档方面,需要引用Android官方文档,确保用户知道去哪里查找最新的信息,比如developer.android.com/reference/android/widget/CalendarView。同时,可能需要注意不同Android版本之间的差异,比如某些属性是否在较新的版本中可用。 最后,生成相关问题时要围绕原生控件的限制、扩展使用、事件处理、与第三方库对比等方面,帮助用户进一步探索。比如,询问如何自定义样式,如何处理周视图,或者比较原生和第三方库的优缺点。</think>### Android原生CalendarView控件详解 Android原生CalendarView控件提供基础的日历展示与日期选择功能,适用于简单的日期选择场景。以下是核心用法说明: #### 一、基础使用 1. **XML布局声明** 在布局文件中添加CalendarView控件: ```xml <CalendarView android:id="@+id/calendarView" android:layout_width="match_parent" android:layout_height="300dp" android:firstDayOfWeek="2" <!-- 设置周起始日为周一 --> android:dateTextAppearance="@style/CalendarDateText" android:showWeekNumber="true"/> ``` 2. **初始化与事件监听** 在Activity中绑定控件并设置日期变化监听: ```java CalendarView calendarView = findViewById(R.id.calendarView); calendarView.setOnDateChangeListener((view, year, month, dayOfMonth) -> { String selectedDate = year + "-" + (month+1) + "-" + dayOfMonth; // 月份从0开始计算 Log.d("Calendar", "Selected: " + selectedDate); }); ``` #### 二、关键属性配置 通过XML或代码可配置以下核心参数: | 属性 | 说明 | 示例值 | |---------------------|-----------------------------|---------------------------| | minDate/maxDate | 设置可选日期范围 | "20240101"/"20241231" | | firstDayOfWeek | 周起始日(1=周日,2=周一) | 2 | | shownWeekCount | 显示周数(默认6周) | 4 | | focusedMonthDateColor | 当前月日期文字颜色 | #FF0000 | | unfocusedMonthDateColor | 非当前月日期文字颜色 | #888888 | #### 三、样式自定义 需通过主题样式覆盖默认外观(原生控件自定义能力有限): ```xml <style name="CalendarDateText" parent="TextAppearance.AppCompat.Body1"> <item name="android:textColor">@color/calendar_text</item> <item name="android:textSize">14sp</item> </style> ``` #### 四、注意事项 1. **API兼容性**:最低支持API 11,部分属性需API 16+ 2. **性能限制**:默认实现内存占用较高,密集日期操作建议使用第三方库如引用[2]提到的Star数3K的CalendarView[^2] 3. **交互局限**:不支持周视图、事件标记等高级功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值