Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗

简介: Android控件之基础控件——进度条类的view——TextView、Checkbox复选控件、RadioButton单选控件、ToggleButton开关、SeekBar拖动条、menu、弹窗

一:view

Android中每个控件父类都是一个view,view代表屏幕上的一块空白区域,具体显示什么内容交个具体的控件显示,

比如这块区域处理文本内容的view就用控件TextView

 

二:控件通用属性

 

 

三:基础控件

处理文本的view——TextView

相当于java中Swing包中的JLabel,但是功能更加强大,支持文本处理、支持html代码、文本样式处理、链接效果等,除了上面的通用的属性外,还有以下属性

android:text="@string/app_name"//内容

android:textColor="#fff"//文本颜色

android:textSize="30sp"//文本大小

android:lineSpacingMultiplier="2"//行倍距

android:lineSpacingExtra="20sp"//行距

android:singleLine="true"//单行显示

android:ellipsize="end"//三点省略位置

android:focusable="true"//设置焦点

android:focusableInTouchMode="true"//设置触摸时可获取焦点

android:marqueeRepeatLimit="marquee_forever"//设置跑马灯

被点击的view——Button

对于按钮主要是如何注册点击事件,方法有以下四种

   第一种:自定义内部类

   <Button

       android:id="@+id/login_btn"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="登录"/>

   public class MainActivity extends AppCompatActivity {

       @Override

       protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_login);

           //获取按钮

           Button login_btn  =findViewById(R.id.login_btn);

           //按钮login_btn被点击时候的事件,使用自定义内部类实现

           login_btnListener login_btnListener = new login_btnListener();

           login_btn.setOnClickListener(login_btnListener) ;//注册事件监听器

       }

       //自定义一个内部类实现点击事件接口

       class login_btnListener implements View.OnClickListener{

           @Override

           public void onClick(View v) {

               Log.e("tag","点击了login_btn按钮戳发了自定义事件");

           }

       }

   }

  第二种: 匿名内部类

   public class MainActivity extends AppCompatActivity {

       @Override

       protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_login);

           Button login_btn  =findViewById(R.id.login_btn);

           login_btn.setOnClickListener(new View.OnClickListener() {

               @Override

               public void onClick(View v) {

                   Log.e("tag","点击了login_btn按钮戳发了自定义事件");

               }

           });

       }

   }

   第三种:当前Activity去实现事件接口

   public class MainActivity extends AppCompatActivity implements View.OnClickListener{//实现了点击事件接口

       @Override

       protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_login);

           Button login_btn  =findViewById(R.id.login_btn);

           login_btn.setOnClickListener(this);

       }

       @Override

       public void onClick(View v) {

           Log.e("tag","点击了login_btn按钮戳发了自定义事件");

       }

   }

  第四种: 在布局文件中添加点击事件属性

   <Button

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:onClick="loginClik"

       android:text="登录"/>

   public class MainActivity extends AppCompatActivity{

       @Override

       protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_login);

       }

       public void loginClik(View v) {//定义xml中绑定的方法

           Log.e("tag","点击了login_btn按钮戳发了自定义事件");

       }

   }

处理图片的view——ImageView

用来现实和控制图像的控件,可以对他进行放大缩小旋转等,常见属性:

android:src="@mipmap/login"//指定前景资源名称

接收用户信息输入的View——EditText

用于输入文本内容的输入框,常用属性

android:inputType="textPassword"//文本框类型如number、text...

android:hint="请输入密码"//文本框默认内容

android:maxLength="12"//设置文本长度

进度条类的view——ProgressBar

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

style="?android:attr/progressBarStyleHorizontal"//设置滚动条样式,这里progressBarStyleHorizontal是水平

android:progress="30"//设置进度值

android:max="200"//设置进度条最大值 默认100

android:indeterminate="true"//设置一直滚动

如何实现滚动条加载,这个相对于xml而言,在java代码中实现比较容易

我们定义带有id的一个滚动条

<ProgressBar

   android:id="@+id/myProgress"

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   style="?android:attr/progressBarStyleHorizontal"

   />

public class MainActivity extends AppCompatActivity{//实现了点击事件接口

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_login);

       final ProgressBar progressBar = findViewById(R.id.myProgress);

       //Android4.o之后不能在线程中直接操作控件 但是进度条是个特列

       new Thread(){

           @Override

           public void run(){

               for (int i = 0; i < 100; i++) {

                   progressBar.setProgress(i);

                   try {

                       Thread.sleep(30);

                   } catch (InterruptedException e) {

                       e.printStackTrace();

                   }

               }

           }

       }.start();

   }

}

Checkbox复选控件

1个常用属性:默认是否选中

android:checked="true"

3个常用方法:设置选中方法、是否选中方法、选中状态监听方法

<CheckBox

   android:id="@+id/checkbox"

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   android:text="篮球"

   android:checked="true" />

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       CheckBox checkBox = findViewById(R.id.checkbox);

       checkBox.setChecked(false);//设置选中方法

       final boolean flag=checkBox.isChecked();//是否选中方法

       Log.d("TAG","选中没有"+flag);

//选中状态监听方法

       checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

           @Override

           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

               //业务处理代码

               Log.d("Tag","选中状态"+isChecked);

           }

       });

   }

}

与checkbox相比

通过点击无法变为未选中、一组RadioButton同时只能选中一个、大部分ui框架中都以圆形表示

需要放在RadioGroup中使用

<RadioGroup

   android:layout_width="wrap_content"

   android:layout_height="wrap_content">

   <RadioButton

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="男"/>

   <RadioButton

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="女"/>

</RadioGroup>

ToggleButton开关

常用属性:

android:textOff="关"

android:textOn="开"

android:checked="true"//状态

<ToggleButton

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   android:textOff="关"

   android:textOn="开"

   android:checked="true"/>

常用方法:基本使用和上面的一样

setChecked(boolean)

setOnCheckedChangeListener()

常用属性

android:max="100" //拖动条长度

android:progress="30"//拖动条起始位置

案例代码:

<SeekBar

   android:id="@+id/seekbar"

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:max="100"

   android:progress="30" />

常用方法:

seekBar.setProgress(50);//设置进度

seekBar.getProgress(); //获取进度

seekBar.setOnSeekBarChangeListener()//拖动条监听

案例代码:

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       SeekBar seekBar  =findViewById(R.id.seekbar);

       seekBar.setProgress(50);

       seekBar.getProgress();

       seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

           //实时获取位置

           @Override

           public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

               Log.d("目前","位置"+seekBar.getProgress());

           }

           //拉动开始位置

           @Override

           public void onStartTrackingTouch(SeekBar seekBar) {

               Log.d("start","位置"+seekBar.getProgress());

           }

           @Override

           public void onStopTrackingTouch(SeekBar seekBar) {

               Log.d("end","位置"+seekBar.getProgress());

           }

       });

   }

}

四:三种menu

选项菜单OptionMenu

Android3.0之后,选项菜单出现在顶部的操作栏中,如下图有两种方式。直接将选项放在操作栏中或者将选项放置在三个点里,点击某个按钮出现的菜单选项

项目res目录右键new,选择Android Resource Directory,创建一个menu类型的资源文件夹

案例代码:(当然我们也可以在AS中通过拖拽完成)

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:app="http://schemas.android.com/apk/res-auto"

   xmlns:android="http://schemas.android.com/apk/res/android">

   <item

       android:title="保存"

       app:showAsAction="always" />

   <item

       android:title="新建"/>

   <item android:title="更多">

       <menu >

           <item android:title="分享" />

           <item android:title="收藏" />

       </menu>

   </item>

</menu>

几个重要的属性

//直接显示在操作栏中,而不是三点里面

app:showAsAction="always"

//同时设置图标和显示方式,只会显示在操作栏中

android:icon="@mipmap/bg"

app:showAsAction="always"

//既要显示图标又要显示字体如下

android:icon="@mipmap/bg"

app:showAsAction="always|withText"

 

显示在Activity中

上面我们定义好了菜单,如何放置到界面中?java代码如下

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   }

   //创建OptionMenu

   @Override

   public boolean onCreateOptionsMenu(Menu menu){

       //加载菜单资源

       getMenuInflater().inflate(R.menu.demomenu,menu);

       return true;

   }

   //菜单选中的逻辑处理的方法

   @Override

   public boolean onOptionsItemSelected(MenuItem item){

       switch (item.getItemId()){

           case R.id.save:

               Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();

               break;

           case R.id.share:

               Toast.makeText(this,"分享成功",Toast.LENGTH_SHORT).show();

               break;

       }

       return super.onOptionsItemSelected(item);

   }

}

上下文菜单ContextMenu

通过长按界面中的某个view不放,屏幕中间弹出ContextMenu,效果如下。但是ContextMenu所属者是某个按钮控件,OptionMenu是Activity

页面代码demomenu.xml

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:app="http://schemas.android.com/apk/res-auto"

   xmlns:android="http://schemas.android.com/apk/res/android">

   <item

       android:title="保存"

       android:id="@+id/save"

       />

   <item

       android:id="@+id/create"

       android:title="新建"/>

</menu>

java代码

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       //给按钮注册选项

       registerForContextMenu(findViewById(R.id.btn));

   }

   //创建ContextMenu

   @Override

   public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {

       getMenuInflater().inflate(R.menu.demomenu,menu);

   }

   //菜单选项方法

   @Override

   public boolean onContextItemSelected(@NonNull MenuItem item) {

       switch (item.getItemId()){

           case R.id.save:

               Toast.makeText(this,"保存",Toast.LENGTH_SHORT).show();

               break;

           case R.id.create:

               Toast.makeText(this,"创建成功",Toast.LENGTH_SHORT).show();

               break;

       }

       return  super.onContextItemSelected(item);

   }

}

如何实现长按按钮,菜单选项出现在顶部菜单栏中,也就是开发中常说的上下文模式

页面代码demomenu.xml一样

java代码如下

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       //为按钮设置上下文操作模式

       //第一步实现ActionMode CallBack

       //第二步view的长按事件去启动上下文操作模式

       findViewById(R.id.btn).setOnLongClickListener(new View.OnLongClickListener() {

           @Override

           public boolean onLongClick(View v) {

               startActionMode(callback);

               return false;

           }

       });

   }

   ActionMode.Callback callback = new ActionMode.Callback() {

       //创建方法,启动上下文操作模式之后调用

       @Override

       public boolean onCreateActionMode(ActionMode mode, Menu menu) {

           getMenuInflater().inflate(R.menu.demomenu,menu);

           return true;

       }

       //创建方法之后调用

       @Override

       public boolean onPrepareActionMode(ActionMode mode, Menu menu) {

           return false;

       }

       //菜单选项点击之后执行

       @Override

       public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

           switch (item.getItemId()){

               case R.id.save:

                   Toast.makeText(IndexActivity.this,"保存",Toast.LENGTH_SHORT).show();

                   break;

               case R.id.create:

                   Toast.makeText(IndexActivity.this,"创建成功",Toast.LENGTH_SHORT).show();

                   break;

           }

           return true;

       }

       //上下文结束时候调用

       @Override

       public void onDestroyActionMode(ActionMode mode) {

       }

   };

}

弹出菜单PopupMenu

点击某个控件,菜单选项出现在指定菜单的下方

xml代码一样

java代码如下

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       //弹出菜单

       final Button button = findViewById(R.id.btn);

       findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {

          @Override

          public void onClick(View v) {

             //实例化一个弹出菜单,第一个参数环境上下文,第二个参数依附于哪个控件下方

             PopupMenu menu = new PopupMenu(IndexActivity.this,button);

             //加载菜单资源,

              menu.getMenuInflater().inflate(R.menu.demomenu,menu.getMenu());

              //设置点击监听器

              menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                  @Override

                  public boolean onMenuItemClick(MenuItem item) {

                      switch (item.getItemId()){

                          case R.id.save:

                              Toast.makeText(IndexActivity.this,"保存",Toast.LENGTH_SHORT).show();

                              break;

                          case R.id.create:

                              Toast.makeText(IndexActivity.this,"创建成功",Toast.LENGTH_SHORT).show();

                              break;

                      }

                      return true;

                  }

              });

              //显示

              menu.show();

          }

       });

   }

}

五:三种对话框(弹窗)

AlertDialog

用于给用户传递信息、提示信息、或者警告用户操作

主要的方法setTitle、 setMessage、create、show

public class IndexActivity extends AppCompatActivity {

 

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   }

//按钮的点击方法

   public  void  myClick(View view){

       //AlertDialog的构造器方法是protected,所以不能直接使用,我们通过builder创建

       AlertDialog.Builder builder = new AlertDialog.Builder(this);

       builder.setTitle("提示");

       builder.setMessage("确定退出?");

       builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

           @Override

           public void onClick(DialogInterface dialog, int i) {

               finish();

           }

       });

       builder.setNegativeButton("取消",null);

       builder.show();//显示窗口

   }

}

自定义Dialog

自定义弹窗的样式以及布局,同时具有弹窗所有的功能

界面activity_mydialog.xml文件如下

<?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"

   android:background="@mipmap/mydialog"

   android:gravity="center_horizontal">

   <TextView

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="你确定要退出吗?"

       android:textColor="#000"

       android:textStyle="bold"

       android:textSize="25sp"

       android:layout_marginTop="240dp"/>

   <LinearLayout

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:orientation="horizontal"

       android:layout_marginTop="55dp">

       <Button

           android:id="@+id/yes"

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:text="确  定"

           android:textStyle="bold"

           android:background="#83c122"

           android:textSize="16dp"

           android:layout_margin="10dp"/>

       <Button

           android:id="@+id/cancel"

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:text="退  出"

           android:textStyle="bold"

           android:background="#83c122"

           android:textSize="16dp"

           android:layout_margin="10dp"/>

   </LinearLayout>

</LinearLayout>

对于界面的布局文件,在styles.xml定义如下

<!--自定义弹窗样式 -->

<style name="mydialog" parent="android:style/Theme.Dialog">

   <item name="android:windowNoTitle">true</item><!--弹窗没有标题-->

   <item name="android:windowBackground">@android:color/transparent</item><!--弹窗背景透明-->

</style>

java类如下

//自定义类继承Dialog

public class MydialogActivity extends Dialog {

   public MydialogActivity(@NonNull Context context, int themeResId) {

       super(context, themeResId);

       //设置布局为对话框

       super.setContentView(R.layout.activity_mydialog);

       findViewById(R.id.yes).setOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View v) {

               System.exit(0);

           }

       });

       findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View v) {

               dismiss();

           }

       });

   }

}

主类中引用

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   }

   public  void  myClick(View view){

       MydialogActivity md = new MydialogActivity(this,R.style.mydialog);

       md.show();

   }

}

当我们点击了btn之后的效果如下

如下图中间出现的全选 粘贴 就是PopupWindow,

activity_popupwindow.xml如下

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:orientation="horizontal" android:layout_width="match_parent"

   android:layout_height="match_parent">

   <Button

       android:id="@+id/cut"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="剪切"/>

   <Button

       android:id="@+id/copy"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:text="复制"/>

</LinearLayout>

java代码

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   }

   public  void  myClick(View view){

       //弹窗的view对象

       View v = LayoutInflater.from(this).inflate(R.layout.activity_popupwindow,null);

       //创建实例 参数1用在弹窗中的view参数2弹窗宽高参数3是否获取焦点

       final PopupWindow popupWindow = new PopupWindow(v,280,80,true);

       //设置背景(可选操作)

       popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//背景透明

       //设置能响应外部点击事件

       popupWindow.setOutsideTouchable(true);

       //设置响应点击事件

       popupWindow.setTouchable(true);

       //显示参数1锚,让弹窗在锚点下方显示,参数2 3相对于锚在x y方向的偏移量

       popupWindow.showAsDropDown(view,100,50);

       v.findViewById(R.id.cut).setOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View v) {

               Toast.makeText(IndexActivity.this,"剪切成功",Toast.LENGTH_SHORT).show();

               popupWindow.dismiss();

           }

       });

       v.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() {

           @Override

           public void onClick(View v) {

               Toast.makeText(IndexActivity.this,"复制成功",Toast.LENGTH_SHORT).show();

               popupWindow.dismiss();

           }

       });

   }

}

附加功能----增加动画,需要附加的代码如下

mytranslate_anim在styles中定义如下

<!--动画样式-->

<style name="mytranslate_anim">

   <item name="android:windowEnterAnimation">@anim/mytranslate</item>

</style>

其中>@anim/mytranslate是定义好的动画资源,方法如下右键res目录,Android resources directory

创建一个anim文件夹

在当前这个anim目录中定义动画资源mytranslate.xml代码如下

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

   <!--translate移动动画 alpha透明动画 rotate旋转动画 scale缩放动画-->

   <translate

       android:fromXDelta="0"

       android:toXDelta="0"

       android:fromYDelta="300"

       android:toYDelta="0"

       android:duration="2"/><!--持续时间-->

</set>

 

附加内容:数组适配器

java内容

public class IndexActivity extends AppCompatActivity {

   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   }

   public  void  myClick(View view){

       final String[] items ={"java","c","c++"};

       ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,items);

       AlertDialog.Builder builder = new AlertDialog.Builder(this)

               .setTitle("请选择")

               //参数1适配器对象,也就是弹窗中数据显示样式的规则器,这里使用数组适配器

//参数2监听器

               .setAdapter(adapter, new DialogInterface.OnClickListener() {

                   @Override

                   public void onClick(DialogInterface dialog, int i) {

                       Toast.makeText(IndexActivity.this,items[i],Toast.LENGTH_SHORT).show();

                       dialog.dismiss();

                   }

               });

       builder.show();

   }

}

实现带有自定义样式的是数组适配器

自定array_item_layout.xml如下

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:orientation="horizontal" android:layout_width="match_parent"

   android:layout_height="match_parent">

   <ImageView

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:src="@mipmap/star"/>

   <TextView

       android:id="@+id/item_text"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"/>

</LinearLayout>

java代码如下

之前的

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,items);

替换为下面代码即可,指定自定义的界面R.layout.array_item_layout,把数组加入到指定的位置R.id.item_text

ArrayAdapter adapter = new ArrayAdapter(this,R.layout.array_item_layout,R.id.item_text,items);

文章首发地址:www.javayihao.top

文章首发公众号:java一号


相关文章
|
2月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
95 0
|
1月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
40 2
|
1月前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
37 5
|
2月前
|
缓存 数据处理 Android开发
在 Android 中使用 RxJava 更新 View
【10月更文挑战第20天】使用 RxJava 来更新 View 可以提供更优雅、更高效的解决方案。通过合理地运用操作符和订阅机制,我们能够轻松地处理异步数据并在主线程中进行 View 的更新。在实际应用中,需要根据具体情况进行灵活运用,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在 Android 中使用 RxJava 更新 View 的技巧和方法,为开发高质量的 Android 应用提供有力支持。
|
2月前
|
缓存 调度 Android开发
Android 在子线程更新 View
【10月更文挑战第21天】在 Android 开发中,虽然不能直接在子线程更新 View,但通过使用 Handler、AsyncTask 或 RxJava 等方法,可以实现子线程操作并在主线程更新 View 的目的。在实际应用中,需要根据具体情况选择合适的方法,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在子线程更新 View 的技巧和方法,为开发高质量的 Android 应用提供支持。
38 2
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
27 2
|
2月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
34 1
|
2月前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
1月前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
51 0