Android控件专题(另附下载一些注意点)

控件

TextView

基本的长宽,文字的类型textStyle(normal无效果、bold粗体、italic斜体),文字的大小textSize

带阴影的文字效果:

  1. shadowColor 阴影颜色
  2. shadowRadius 阴影模糊程度(0.1为原本、3.0为推荐效果)
  3. shadowDx、shadowDy 水平、竖直移动

跑马灯效果

  1. singleLine 内容单行显示
  2. focusable 是否可以获取焦点
  3. focusableInTouchMode 控制视图在触摸模式下是否可聚焦
  4. ellipsize 省略文本,start省略号在前、end在后、marquee跑马灯选这种
  5. marqueeRepeatLimit 字母动画重叠次数
按钮按下,开始运行的三种方法
  1. 布局空间中设置 clickable =“true”
  2. 自定义控件MyTextView
  3. 添加 <requestFocus/>获取焦点

Button

继承TextView,所以功能Button功能都可实现
StateListDrawable 为Drawable资源的一种

  • 关键节点<selector>
  1. drowable 引用的Drawable位图
  2. android:state_pressed //是否按下,如一个按钮触摸或者点击。
  3. android:state_focused //是否取得焦点,比如用户选择了一个文本框。
  4. android:state_hovered //光标是否悬停,通常与focused state相同,它是4.0的新特性
  5. android:state_selected //是否被选择,针对有滚轮的情况
  6. android:state_checked //被checked了,如:一个RadioButton可以被check了。
  7. android:state_enabled //能够接受触摸或者点击事件,是否可用
  8. android:state_checkable //是否被勾选,限checkbox使用

注意点

按钮背景无法改变颜色的情况如何解决:通过修改values的themes的parent=“。。。.Bridge”即可

Button时间处理

触摸事件

  1. ACTION_DOWN 0
  2. ACTION_UP 1
  3. ACTION_MOVE 2

EditText

联想登录注册时的账号、密码等。

  1. hint 提示、textColorHint
  2. inputType 输入类型
  3. drawableXXXX 在输入框指定方位添加图片
  4. drawablePadding 设置图片与输入内容的间距
  5. paddingXXXX 内容与边框的间距
<!--    inputType=phone时只有数字可以输入
        textpassword时为密码 自动隐藏
        numberpassword时仅数字 隐藏
        android:drawableLeft="@drawable/ic_baseline_how_to_reg_24"图片靠左-->
<!--    android:drawablePadding="20sp" 两者间距-->
<!--    android:paddingLeft="10sp" 人物与左边距离-->
    <EditText
        android:hint="请输入用户名"
        android:textColorHint="#95a1aa"
        android:drawableLeft="@drawable/ic_baseline_how_to_reg_24"
        android:layout_width="300sp"
        android:inputType="textPassword"
        android:drawablePadding="20sp"
        android:paddingLeft="10sp"
        android:layout_height="100sp"></EditText>

ImageView

scaleType属性分为多种,这里主要举例四种

  1. fitStart 保持宽高比 左上
  2. fitCenter 保持宽高比 中间
  3. fitXY 独立缩放 比例大概率改变
  4. center 保持 出则裁剪
<!--    调整max直到满足某一个max-->
    <ImageView
        android:layout_width="100sp"
        android:layout_height="200sp"
        android:scaleType="centerInside"
        android:maxHeight="100sp"
        android:maxWidth="50sp"
        android:adjustViewBounds="true"
        android:src="@drawable/a"/>

ProgressBar

默认进度条

<ProgressBar
        android:id="@+id/pd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

直线进度条

<!--    max=100每次增加1/100的意思-->
    <!--    以下为水平进度条-->
<!--    android:indeterminate="false"true向转圈的、不显示进度条,false是默认的、显示进度条-->
    <ProgressBar
        android:indeterminate="false"
        android:id="@+id/pd2"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

模拟下载直线进度条的运行

//模拟下载
    public void load(View view){
        int progress = progressBar2.getProgress();
        progress+=10;
        progressBar2.setProgress(progress);
    }

NotificationManager

存在问题为

  1. 真机调试没有显示时间
  2. 小图标没有用,默认为软件的图标
  3. 点击弹窗无法跳转
重点
  1. 创建一个通知管理器 以单例模式获得,在Activity_getService(String)方法获取NotificationManager对象 直接传递Context.NOTIFICATION_SERVICE
  2. 使用Builde构造器来创建Notification对象 使用NotificationCompat类的Builder构造器创建Notication对象
    注意:Android8.0新增通知渠道概念,如果没有设置,则通知无法在Android8.0的机器上显示。
代码

布局中设置两个按钮作为触发装置

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发出通知"
        android:onClick="sendNotification"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="取消通知"
        android:onClick="cancelNotification"/>

JAVA代码中

    private NotificationManager manager;
    private Notification notification;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //通知
        manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

        //channelld渠道通知
        //判断sdk版本,8.0以上可用
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            //importance代表重要程度
            NotificationChannel channel = new NotificationChannel("一致1","用户进去可以看到,不重要",NotificationManager.IMPORTANCE_HIGH);
            manager.createNotificationChannel(channel);
        }

        //创建通知栏的意图
        Intent intent = new Intent(this,NotificationActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0, intent,0);
        notification = new NotificationCompat.Builder(this,"一致1")
                .setContentTitle("通知标题")
                .setContentText("内容")
                //设置小图标
                //安卓从5.0开始,对于通知栏图标进行修改,谷歌要求所有通知栏图标,应该使用alpha图层进行回执,而且不包括RGB图层
                //简单来说,图片不能带颜色;传值为int型icon
                .setSmallIcon(R.drawable.ic_baseline_how_to_reg_24)
                //右边显示图片的大图标
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.a))
                //小图标的颜色,传入为int,如果是十六进制的话需要强转rgb
                .setColor(Color.parseColor("#ff0000"))
                //点击后会跳转
                .setContentIntent(pendingIntent)
                //点击后取消
                .setAutoCancel(true)
                //通知被创建的时间,但不设置时即为默认现在的时间
//                .setWhen(1000)
                .build();
    }
    //发出通知
    public void sendNotification(View view){
        //id随便写,都行,但两个方法里面id需要保持一致
        manager.notify(1,notification);
    }

    //取消通知
    public void cancelNotification(View view){
        //保持一致的id
        manager.cancel(1);
    }

Toolbar(用于替换ActionBar)

更加灵活设置导航栏
首先需要在values的文件夹下的themes.xml中将“。。。.DarkActionBar”改为“。。。.NoActionBar”(变为没有上面的栏目)

  1. 让导航栏中的文字在最中间,始终最中间
			android:text="标题"
            android:layout_gravity="center"
            android:gravity="center"
  1. 布局设置的注意点(第一种方法)
<!--    android:layout_height="?attr/actionBarSize"取决项目中设置的颜色-->

<!--    app:navigationIcon="@drawable/ic_baseline_arrow_back_ios_24"设置时-->
<!--    记得设置app的位置eg.xmlns:app="http://schemas.android.com/apk/res-auto"
        用的app的,所以不是安卓里面自带的东西-->
        xmlns:app="http://schemas.android.com/apk/res-auto"
        <androidx.appcompat.widget.Toolbar
        android:id="@+id/tb"
        app:navigationIcon="@drawable/ic_baseline_arrow_back_ios_24"
        app:title="标题"
        android:layout_width="match_parent"
        app:titleTextColor="#fff000"
        app:titleMarginStart="10sp"
        app:subtitle="子标题"
        app:subtitleTextColor="#00ffff"
        app:logo="@drawable/ic_launcher_foreground"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/purple_200">
    </androidx.appcompat.widget.Toolbar>
  1. java文件中设置(第二种方法)
Toolbar toolbar2 = findViewById(R.id.tb2);
        toolbar2.setNavigationIcon(R.drawable.ic_baseline_arrow_back_ios_24);
        toolbar2.setTitle("标题");
        toolbar2.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("this","toolbar2被点击了");
            }
        });

AlertDialog

基础为提示弹窗,无按钮无dialogView

public void isClick(View view){

        View dialogView = getLayoutInflater().inflate(R.layout.dialog_view,null);

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.mipmap.ic_launcher)
                .setTitle("我是对话框")
                .setMessage("今天天气怎么样")

                //三个按钮,不同的手机的位置不一样
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })
                //中间按钮
                .setNeutralButton("中间的", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                })

                .setView(dialogView)
                .create()//AlterDialog里面的
                .show();//Dialog里面的,所以顺序不能改(后面两个顺序不能变)
    }

Popupwindow

将主布局与popup_view分开

public void isClick(View view){
        View popupView = getLayoutInflater().inflate(R.layout.popup_view, null);

        //popup的两个按钮
        Button btn1 = popupView.findViewById(R.id.b1);
        Button btn2 = popupView.findViewById(R.id.b2);
        //focusable的true代表点击空白处可直接退出
        PopupWindow popupWindow = new PopupWindow(popupView,
                ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);

        //相对于某个空间的位置anchor(正左下方),无偏移
        popupWindow.showAsDropDown(view);
//        popupWindow.showAsDropDown(view,view.getWidth(), view.getHeight());

        //设置背景色,可以为图片,但需要为数字,待解决的问题
        popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher_background));
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();//二次点击做退出处理
            }
        });
    }

下载注意点

如果电脑没有任何配置,没有设置环境变量等,则Settings、Do not import—、Send usage statistics to Google.
当弹窗弹出时Unable to acces: Android SDK add-on list,选择cancel
选择Standard,标准下载

新建项目时

Name与Save location最后:(…\Name)保持一致
设置Minimun SDK 5.0以上
gitignore代表版本 :

  1. 内是用于app的
  2. 外是用于工程的

proguard-rules.pro 项目代码的混淆规则
drawable、drawable-v24都是用于放照片的
valuse文件夹用于放置颜色、样式、主题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值