Andorid学习Day01(控件)

TextView控件:

  • layout_width: 组件的宽度
  • layout_height:组件的高度
  • id:为TextView设置一个组件Id
  • text :设置显示的文本内容
  • textColor:设置字体颜色
  • textStyle:设置字体风格 可选:
    • normall(无效果)
    • bold(加粗)
    • italic(斜体)
  • textSize:字体大小 单位一般使用sp
  • background:设置控件的背景,可以理解为填充整个控件的颜色,可以是图片
  • gravity:设置控件中内容的对齐方向,TextView中是文字,ImgaeView中是图片等等。

拓展:

  • shadowColor:设置阴影颜色,需要与shadowRadius一起使用
  • shadowRadius:设置阴影的模糊程度,设为0.1就变成相同字体了,建议使用3.0
  • shadowDx:设置阴影在水平方向的偏移
  • shadowDy:设置阴影在垂直方向的偏移,就是垂直方向阴影开始的纵坐标位置

设置TextView的跑马灯效果

  • singleLine:内容单行显示
  • focusable:是否可以获取焦点
  • focusableInTouchMode:用于控制视图在触摸模式下是否可以聚焦
  • ellipsize:在哪里省略文本
  • marqueeRepeatLimit:字母动画重复的次数
<TextView
        android:id="@+id/text_test1"
        android:shadowColor="@color/white"
        android:shadowRadius="3.0"
        android:shadowDx="10"
        android:shadowDy="10"

        android:text="这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView"

        android:singleLine="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"

        android:textColor="@color/green"
        android:textStyle="italic"
        android:textSize="30sp"
        android:background="@color/black"
        android:gravity="center_vertical"
        android:layout_gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="100dp">
        <!--用于请求获取焦点-->
        <requestFocus/>
    </TextView>

也可通过自定义控件的方式来实现 获取焦点

package com.tian.myfirstapplication;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

import androidx.annotation.Nullable;

public class MyTextView extends androidx.appcompat.widget.AppCompatTextView {
    public MyTextView(Context context) {
        super(context);
    }

    public MyTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}
<com.tian.myfirstapplication.MyTextView
        android:shadowColor="@color/white"
        android:shadowRadius="3.0"
        android:shadowDx="10"
        android:shadowDy="10"

        android:text="这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView 这是一个TextView"

        android:singleLine="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"

        android:textColor="@color/green"
        android:textStyle="italic"
        android:textSize="30sp"
        android:background="@color/black"
        android:gravity="center_vertical"
        android:layout_gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="100dp"/>

 

2.Button控件

  • StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点<selector>,我们只需要将Button的background属性设置为该drawable资源即可轻松实现
  • drawable:引用的Drawable位图。
  • state_focused:是否获得焦点
  • state_pressed:控件是否被按下
  • state_enabled:控件是否可用
  • state_selected:控件是否被选择,针对有滚轮的情况
  • state_checked:控件是否被勾选
  • state_checkable:控件可否被勾选,eg:checkbox
  • state_window_focused:是否获得窗口焦点
  • state_active:控件是否处于活动状态,eg:slidingTab
  • state_single:控件包含多个子控件时,确定是否只显示一个子控件
  • state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态
  • state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态
  • state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_baseline_5g_24" android:state_pressed="true"/>
    <item android:drawable="@drawable/ic_baseline_4k_24"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#ffff0000" android:state_pressed="true"/>
    <item android:color="#ff00ffff" />
</selector>
  <Button
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:background="@drawable/btn_selector"
        android:backgroundTint="@color/btn_color_selector"
        android:text="我是按钮" />
  • 点击事件
  • 长按事件
  • 触摸事件
package com.tian.myfirstapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.animation.TimeAnimator;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private static final String TIAN = "tianlog";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = findViewById(R.id.btn_test);

        //点击事件
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TIAN,"onClick");
            }
        });

        //长按事件
        btn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Log.e(TIAN,"onLongClick");
                return false;
            }
        });

        //触摸事件
        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.e(TIAN,"OnTouchListener"+event.getAction());
                return false;
            }
        });
    }
}
2022-10-08 20:22:04.371 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener0
2022-10-08 20:22:04.442 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:04.787 7121-7121/com.tian.myfirstapplication E/tianlog: onLongClick
2022-10-08 20:22:05.244 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:05.419 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:05.570 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:06.321 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:06.619 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:06.818 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener2
2022-10-08 20:22:06.953 7121-7121/com.tian.myfirstapplication E/tianlog: OnTouchListener1
2022-10-08 20:22:07.000 7121-7121/com.tian.myfirstapplication E/tianlog: onClick

 

PS:当返回值为true时其他的方法自动被屏蔽

3.控件EditText

  • hint:输入提示
  • textColorHint 输入提示文字的颜色
  • inputType:输入类型
  • drawableXxxx:在输入框的指定方位添加图片
  • drawablePadding:设置图片与输入内容的间距
  • paddingXxxx:设置内容与边框的间距
  • background:背景色
  private static final String TIAN = "tianlog";
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = findViewById(R.id.btn_test);
        editText = findViewById(R.id.ed_text);
        //点击事件
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TIAN,"onClick");
                Log.e(TIAN,editText.getText().toString());
            }
        });
 <EditText
        android:id="@+id/ed_text"
        android:hint="请输入用户名"
        android:textColorHint="#95a1aa"
        android:inputType="text"
        android:drawableLeft="@drawable/ic_baseline_person_24"
        android:drawablePadding="20dp"
        android:paddingLeft="20dp"
        android:layout_width="match_parent"
        android:layout_height="100dp"/>

4.ImageView控件

  • src:设置图片资源
  • scaleType:设置图片缩放类型
  • maxHeight:最大高度
  • maxWidth:最大宽度
  • adjustViewBounds:调整View的界限

缩放类型:

  • fitStart:保持宽高比缩放图片,知道较长的边与Image的边长相等,缩放完成后将图片放再ImageView的左上角。
  • fitCenter:默认值,同上,缩放后放于中间。
  • fitEnd:同上,缩放后放于右下角。
  • fitXY:对图像进行横纵方向进行独立缩放,使得该图片完全适应ImageView,但是图片的宽高比可能会发生改变。
  • center:保持原图大小,显示在ImgaeView的中心,当原图的size大于ImageView的size,超过部分裁剪处理
  • centerCrop:保持宽高比缩放图片,直到完全覆盖ImageView,可能会出现显示不完全。
  • centerInside:保持宽高比缩放图片,直到ImageView能完全地显示图片/
  • matrix:不改变原图大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理。
android:scaleType="center"
<ImageView
        android:src="@drawable/test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxHeight="200dp"
        android:maxWidth="200dp"
        android:adjustViewBounds="true"
        />

 

5.ProgressBar控件

  • max:进度条的最大值
  • progress:进度条已完成进度值
  • indeterminacte:如果设置成true,则进度条不精确显示进度
  • style="?android:attr/progressBarStyleHorizontal"水平进度条
        progressBar = findViewById(R.id.pro_bar);
        //点击事件
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //判断当前进度条是否显示,显示就关掉不显示就让其显示
                if (progressBar.getVisibility() == View.GONE){
                    progressBar.setVisibility(View.VISIBLE);
                }else {
                    progressBar.setVisibility(View.GONE);
                }
            }
        });
        //点击事件
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //每点击一次按钮,进度条就加10 总数100
               int progress = progressBar.getProgress();
               progress+=10;
               progressBar.setProgress(progress);
            }
        });
<ProgressBar
       android:id="@+id/pro_bar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:layout_width="300dp"
        android:layout_height="wrap_content"/>
    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:indeterminate="true"
        android:layout_width="300dp"
        android:layout_height="wrap_content"/>

 6.Notification与NotificationManager

  • 创建一个NotficationManager

        NotificationManager类是一个通知管理器类,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般并不直接实例化这个对象。在Activity中,可以使用Activity.getSystemService(String)方法获取NotificationManager对象,Activity.getSystemService(String)方法可以通过Adroid系统级服务的句柄,返回对应的对象,在这里需要放回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE即可

  • 使用Builder构造器来创建Notfication对象

        使用NotificationCompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都能正常工作。Android8.0新增了通知渠道这个概念,如果没有设置,则通知无法在Android8.0的机器上显示。

常见方法说明:

  1.  setContentTitle(String string) 设置标题 (必须设置)
  2. setContentText(String string)设置文本内容(必须设置)
  3. setSmallIcon(int icon)设置小图标 (必须设置)
  4. setLargeIcon(Bitmap icon)设置通知的大图标
  5. setColor(int argb)设置小图标的颜色
  6. setContetnIntent(PendingIntent intent)设置点击通知后的跳转意图
  7. setAutoCancel(boolean boolean)设置点击通知后自动清除通知
  8. setWhen(long when) 设置通知被创建的时间

ps:Android5.0系统开始,对于通知栏图标的设计进行了修改。现在Google要求,所有应用程序的通知栏图标,应该只使用alpha图层来进行绘制,而不应该包括RGB图层

  • NotificationChannel

        通知渠道,Android 8.0引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。

通知的重要程度设置,NotificationManager类中

  • IMPORTANCE_NONE:关闭通知
  • IMPORTANCE_MIN:开启通知,不会弹出,但没有提示音,状态栏中无显示。
  • IMPORTANCE_LOW:开启通知,不会弹出,不发出提示音,状态栏中显示。
  • IMPORTANCE_DEFAULT:开启通知,不会弹出,发出提示音,状态栏中显示
  • IMPORTANCE_HIGH:开启通知,会弹出,发出提示音,状态栏中显示
package com.tian.myfirstapplication;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;

public class NotificationActivity extends Activity {

    private NotificationManager manager;
    private  Notification notification;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notification_activity_layout);

        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            NotificationChannel notificationChannel = new NotificationChannel("tian", "测试通知", NotificationManager.IMPORTANCE_HIGH);
            manager.createNotificationChannel(notificationChannel);
        }

        Intent intent = new Intent(this, MainActivity.class);
        PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0);

        //前三个为必须设置的属性  时间默认为当前时间可设置可不设置
       notification = new NotificationCompat.Builder(this, "tian")
                .setContentTitle("测试通知:官方通知")
                .setContentText("世界那么大,我想去看看")
                .setSmallIcon(R.drawable.ic_baseline_person_24)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.test))
                .setColor(Color.parseColor("#ff0000"))
                .setContentIntent(activity)
                .setAutoCancel(true)
                .build();

    }

    public void deleteNotification(View view) {
        manager.cancel(1);
    }

    public void sendNotification(View view) {
        manager.notify(1,notification);
    }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:onClick="sendNotification"
        android:layout_width="100dp"
        android:layout_height="100dp"/>
    <Button
        android:onClick="deleteNotification"
        android:layout_width="100dp"
        android:layout_height="100dp"/>

</LinearLayout>

7.ToolBar控件

  • layout_width="match_parent"
  • layout_height="?attr/actionBarSize"
  • background="#ffff00"
  • app:navigationicon="@drawable/ic_baseline_arrow_back_24"
  • app:title="主标题"
  • app:titleTextColor="#ff0000"
  • app:titleMarginStart="90dp"
  • app:subtitle="子标题"
  • app:subtitleTextColor="#00ffff"
  • applog="@mipmap/ic_launcher"
 <androidx.appcompat.widget.Toolbar
        android:id="@+id/tb"
        android:background="#ffff00"
        app:navigationIcon="@drawable/ic_baseline_arrow_back_24"
        app:title="@string/tool_bar_title"
        app:titleTextColor="#ff0000"
        app:titleMarginStart="90dp"
        app:subtitle="子标题"
        app:subtitleTextColor="@color/green"
        app:logo="@drawable/test"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"/>
Toolbar toolbar = findViewById(R.id.tb);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("tianlog","toolbar被点击了");
            }
        });

 可以这样设置标题的居中 同理可设置图片 副标题等等(推荐使用)

 <androidx.appcompat.widget.Toolbar
        android:id="@+id/tb"
        android:background="#ffff00"
        app:navigationIcon="@drawable/ic_baseline_arrow_back_24"
        app:titleMarginStart="90dp"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize">
        <TextView
            android:textColor="@color/green"
            android:text="标题"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </androidx.appcompat.widget.Toolbar>

8.AlertDialog控件

  • AlertDialog.Builder builder = new AlertDialog.Builder(context);构建Dialog的各种参数
  • Builder.setIcon(int iconId);添加ICON
  • Builder.setTitle(CharSequence title);添加标题
  • Builder.setMessage(CharSequence message);添加信息
  • Builder.setView(View view);设置自定义布局
  • Builder.create();创建Dialog
  • Builder.show();显示对话框
  • setPositiveButton 确定按钮
  • setNegativeButton 取消按钮
  • setNeutraButton 中间按钮
<Button
        android:onClick="showAlertDialog"
        android:background="@color/green"
        android:text="显示对话框"
        android:layout_marginTop="10dp"
        android:layout_width="100dp"
        android:layout_height="50dp"/>
 public void showAlertDialog(View view) {

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

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //注意set方法返回的builder而create返回的不是builder所以必须放再后面
        builder.setIcon(R.drawable.ic_baseline_person_24)
                .setTitle("我是对话框")
                .setMessage("今天天气很好,出去走走吧")
                .setView(dialogView)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("tianlog","点击了确定");
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("tianlog","点击了取消");
                    }
                })
                .setNeutralButton("中间按钮", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.e("tianlog","点击了中间按钮");
                    }
                })
                .create()
                .show();
    }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="@color/green"

    xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView
        android:src="@drawable/test"
        android:maxHeight="200dp"
        android:maxWidth="200dp"
        android:adjustViewBounds="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:text="哈哈,天气很好"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

 

9.PopupWindow控件

  • setContentView(View contentView);设置popupWindow显示的view
  • showAsDropDown(View anchor);相对某个控件的位置(正左下方),无偏移
  • showAsDropDown(View anchor,int xoff,int yoff)相对某个控件的位置,有偏移
  • setFocusable(boolean focusable)设置是否获取焦点
  • setBackgroundDrawable(Drawable background)设置背景
  • dismiss() 关闭弹窗
  • setAnimationStyle(int animationStyle)设置加载动画
  • setTouchable(boolean touchable) 设置触摸使能
  • setOutsideTouchable(boolean touchable) 设置PopupWindow外卖呢的触摸使能
 public void popupWindowShow(View view) {
        View inflate = getLayoutInflater().inflate(R.layout.alert_dialog_layout, null);
        ImageView img_test = inflate.findViewById(R.id.img_test);
        img_test.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("tianlog","点击了popupWindow里面的图片控件");
            }
        });

        PopupWindow popupWindow = new PopupWindow(inflate, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.test,getTheme()));
        popupWindow.setFocusable(true);
        popupWindow.showAsDropDown(view,10,10);

    }
<Button
        android:text="popupWindow显示"
        android:onClick="popupWindowShow"
        android:background="#ff0000"
        android:layout_marginTop="10dp"
        android:layout_width="100dp"
        android:layout_height="50dp"/>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devotes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值