Android Studio学习笔记(一)控件的使用

想通过Android Studio做毕业设计,因此开始学习此软件,这是B
站的up主 国防科大Allen 的视频教程笔记,方便日后复习之用。

1.TextView 设置跑马灯形式的滚动文本

<TextView
        android:id="@+id/tv_one"
        android:text="@string/tv_one"

        android:shadowColor="@color/red"
        android:shadowRadius="3"
        android:shadowDx="10.0"
        android:shadowDy="10.0"

        android:gravity="center_horizontal"
        android:textColor="@color/black"
        android:textSize="30sp"
        android:textStyle="italic"

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

        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <requestFocus/>
    </TextView>

2.Button 使用StateListDrawable设置不同的图片效果
设置背景颜色或者图片时要先在themes.xml文件中的style标签第一行最后添加.Bridge
添加图片:drawable文件新建drawable resource file,用item标签添加图片;

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_baseline_accessibility_24" android:state_pressed="true"/>
    <item android:drawable="@drawable/ic_baseline_accessibility_new_24"/>
</selector>

设置颜色:显示顺序是背景色—文字色—前景色,res文件新建Directory,再在其中新建drawable resource file

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/red" android:state_pressed="true"/>
    <item android:color="@color/black"/>
</selector>

添加点击、长按、触摸事件,在MainActivity.java文件中添加

public class MainActivity extends AppCompatActivity {

    private static final String TAG ="Rong" ;
    private
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn);
        //点击事件
//        btn.setOnClickListener(new View.OnClickListener() {
//
//            @Override
//            public void onClick(View view) {
//                Log.e(TAG, "onClick: " );
//            }
//        });
        //长按事件
        btn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                Log.e(TAG, "onLongClick: " );
                return false;
            }
        });
        //触摸事件,分三种 + motionEvent.getAction()打印0 1 2
        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                Log.e(TAG, "onTouch: " + motionEvent.getAction());
                return false;
            }
        });

    }

    public void RongClick(View view) {
        Log.e(TAG, "onClick: " );
    }
 }
}

最后activity_main.xml中代码如下:

<Button
        android:id="@+id/btn"
        android:text="我是按钮"
        android:background="@drawable/btn_selector"
        android:backgroundTint="@color/btn_color_selector"
        android:foreground="#9900ff00"
        android:onClick="RongClick"  //添加后相当于注释掉的点击事件
        android:layout_width="200dp"
        android:layout_height="100dp"/>

3.EditText的使用
在这里插入图片描述

<EditText
    android:id="@+id/et"
    android:hint="请输入用户名"
    android:textColorHint="#95a1aa"
    android:inputType="text"
    android:drawableLeft="@drawable/ic_baseline_insert_emoticon_24"
    android:drawablePadding="10dp"
    android:paddingLeft="20dp"
    android:background="@color/white"
    android:layout_width="200dp"
    android:layout_height="100dp"/>
<EditText
    android:hint="请输入密码"
    android:textColorHint="#95a1aa"
    android:inputType="textPassword"
    android:drawableLeft="@drawable/ic_baseline_insert_emoticon_24"
    android:drawablePadding="10dp"
    android:paddingLeft="20dp"
    android:background="@color/white"
    android:layout_width="200dp"
    android:layout_height="100dp"/>
<Button
    android:id="@+id/btn"
    android:text="获取用户名"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

//java文件
public class MainActivity extends AppCompatActivity {

    private EditText et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

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

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String text = et.getText().toString();
                Log.e("Rong", "输入的用户名: "+text);
            }
        });

    }
}

4.ImageView
在这里插入图片描述
在这里插入图片描述

<ImageView
    android:src="@drawable/bottle"
    android:maxHeight="200dp"
    android:maxWidth="200dp"
    android:adjustViewBounds="true"
    android:layout_width="200dp"
    android:layout_height="200dp"/>

设置号最大最小界限后,设置adjustViewBounds为true,使得界限刚好与图片边界重合。

5.ProgressBar
在这里插入图片描述

<Button
        android:text="显示隐藏加载器"
        android:onClick="RongClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <ProgressBar
        android:id="@+id/pb2"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:indeterminate="true"
        android:layout_width="300dp"
        android:layout_height="wrap_content"/>
    <Button
        android:text="模拟下载"
        android:onClick="Load"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
public class MainActivity extends AppCompatActivity {
    private ProgressBar progressbar;
    private ProgressBar progressbar2;

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

        progressbar = findViewById(R.id.pb);
        progressbar2 = findViewById(R.id.pb2);

    }
    public void Load(View view) {
        int progress = progressbar2.getProgress();
        progress += 10;
        progressbar2.setProgress(progress);

    }
}

android:indeterminate="true"的作用是让进度条自动播放。
6.Notification
在这里插入图片描述

<Button
        android:text="发送通知"
        android:onClick="SendNotification"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:text="取消通知"
        android:onClick="CancelNotification"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
public class MainActivity extends AppCompatActivity {
    private NotificationManager manager;//全局变量
    private  Notification notification;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        //安卓后面的版本才支持此功能,因此需要判断
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            NotificationChannel channel = new NotificationChannel("Rong","测试通知",NotificationManager.IMPORTANCE_HIGH);//重要性最高,窗口弹出
            manager.createNotificationChannel(channel);
        }
        //跳转意图
        Intent intent = new Intent(this, NotificationActivity.class);
        PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);

        notification = new NotificationCompat.Builder(this,"Rong")
                .setContentTitle("重要通知")   //设置标题
                .setContentText("世界这么大,想去走走吗?")   //设置文本内容
                .setSmallIcon(R.drawable.ic_baseline_accessibility_new_24)  //设置阿尔法小图标,不能是RGB图层
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.bottle))  //有颜色的大图标(一张图片即可)
                .setContentIntent(pi)//设置点击通知后的跳转意图 pi
                .setAutoCancel(true)//点击通知自动取消
                .build();
    //发送通知
    public void SendNotification(View view) {
        manager.notify(1,notification);
    }
    public void CancelNotification(View view) {
        manager.cancel(1);
    }
}

这里要注意,要实现点击通知后跳转页面需要新建一个java文件,这里测试只需要打印“进入NotificationActivity”即可。不要忘记在AndroidManifest中注册一下。

public class NotificationActivity extends Activity {  //alt+enter 注册一下
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("Rong", "onCreate: 进入NotificationActivity" );
    }
}

7.Toolbar
在这里插入图片描述
themes.xml文件的style标签内容改为parent=“Theme.MaterialComponents.DayNight.NoActionBar.Bridge” 可以去掉默认的导航栏。

<androidx.appcompat.widget.Toolbar
        android:id="@+id/tb"
        android:background="#ffff00"
        app:navigationIcon="@drawable/ic_baseline_arrow_back"
        app:title="标题"
        app:titleTextColor="#ff0000"
        app:titleMarginStart="126dp"
        app:subtitle="子标题"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"/>
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/tb2"
        android:background="#ffff00"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize">
        <TextView
            android:gravity="center"
            android:layout_gravity="center"
            android:text="标题"
            android:textSize="25sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </androidx.appcompat.widget.Toolbar>
import androidx.appcompat.widget.Toolbar;//这里要注意要导入androidx的包,
                                         //而不是android的包,因为xml中使用的是androidx
                                      
public class MainActivity extends AppCompatActivity {

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

        Toolbar toolbar = findViewById(R.id.tb);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("Rong", "onClick:toolbar被点击了 " );
            }
        });

        Toolbar toolbar2 = findViewById(R.id.tb2);
        toolbar2.setNavigationIcon(R.drawable.ic_baseline_arrow_back);
        toolbar2.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("Rong", "onClick:toolbar 2 被点击了 " );
            }
        });
}

8.AlertDialog
在这里插入图片描述

<Button
        android:text="显示对话框"
        android:onClick="ADclick"
        android:background="@color/btn_color_selector"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

java部分:

public void ADclick(View 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("今天下雪啦~")
            .setView(dialogview)
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.e("yes", "onClick:点击了确定 " );
                }
            })
            .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.e("no", "onClick:点击了取消 " );
                }
            })
            .setNeutralButton("中间", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.e("med", "onClick:点击了取消 " );
                }
            })
            .create() //上面三个都是AlertDialog里的builder内部的,可以用链式结构,而create是返回AlertDialog,所以放在后面
            .show();//show是Dialog里的,所以放到最后面


}

这里需要新建一个layout文件下的xml文件dialog_view.xml用来描述对话框内部的一个View。

<?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"
    android:background="#ffff00"
    android:orientation="horizontal">

    <ImageView
        android:src="@mipmap/ic_launcher"
        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
在这里插入图片描述
在layout中新建popup_view.xml,代表弹出窗口的内容

<?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"
    android:background="@mipmap/ic_launcher"
    android:orientation="vertical">
        <!--    图片大小会影响弹出窗口大小-->
        <Button
            android:id="@+id/shanghai"
            android:text="上海"
            android:textSize="18sp"
            android:padding="5dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/beijing"
            android:text="北京"
            android:padding="5dp"
            android:textSize="18sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

</LinearLayout>

activity_main.xml中 “弹出PopupWindow” 按钮:

<Button
    android:text="弹出PopupWindow"
    android:onClick="popclick"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

按钮对应的java函数:

public void popclick(View view) {
    View popupview = getLayoutInflater().inflate(R.layout.popup_view, null);
    Button shanghai = popupview.findViewById(R.id.shanghai);//用的是popup_view里的按钮,因此要用popupview.findViewById
    Button beijing = popupview.findViewById(R.id.beijing);

    //ViewGroup.LayoutParams.WRAP_CONTENT可使得PopupWindow刚好包裹住 popup_view,相当于wrap_content
    PopupWindow popupWindow = new PopupWindow(popupview,ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,true);
    //popupview.setBackgroundDrawable(getResources().getDrawable(R.drawable.bottle));
    popupview.setBackground(getResources().getDrawable(R.drawable.bottle));

    popupWindow.showAsDropDown(view);//点击后显示,view使得popupwindow显示在view对应的按钮正下方无偏移

    shanghai.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.e(TAG, "onClick:你是住在上海吗");
            popupWindow.dismiss();

        }
    });
    beijing.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.e(TAG, "onClick:你是住在北京吗");
            popupWindow.dismiss();
        }
    });

}

部分代码实现的整体效果图:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值