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一号


相关文章
|
5月前
|
XML Java Android开发
34. 【Android教程】菜单:Menu
34. 【Android教程】菜单:Menu
110 2
|
2月前
|
Android开发 UED Kotlin
Android中如何跳转到Wi-Fi开关设置页
本文介绍如何在Android应用开发中使用隐式Intent引导用户至特定系统设置页面,如Wi-Fi设置页,并提供Kotlin代码示例。通过设置Intent的Action属性并检查设备兼容性,可轻松实现跳转功能,提升用户体验。此外,还列举了其他常用设置页面的Intent Action及注意事项。
77 15
|
1月前
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
30 0
|
2月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
44 3
|
3月前
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。
|
5月前
|
Android开发
Android中如何快速的实现RecycleView的拖动重排序功能
使用`ItemTouchHelper`和自定义`Callback`,在`RecyclerView`中实现拖动排序功能。定义`ItemTouchHelperAdapter`接口,`Adapter`实现它以处理`onItemMove`方法。`SimpleItemTouchHelperCallback`设置拖动标志,如`LEFT`或`RIGHT`(水平拖动),并绑定到`RecyclerView`以启用拖动。完成这些步骤后,即可实现拖放排序。关注公众号“AntDream”获取更多内容。
112 3
|
5月前
|
XML 前端开发 API
Android中实现Bitmap在自定义View中的放大与拖动
Android中实现Bitmap在自定义View中的放大与拖动
149 1
|
4月前
|
XML 数据格式
Android-自定义三角形评分控件
Android-自定义三角形评分控件
40 0
|
5月前
|
XML Android开发 数据格式
Android基础控件介绍
Android基础控件介绍
|
5月前
|
Android开发
Android 自定义View 测量控件宽高、自定义viewgroup测量
Android 自定义View 测量控件宽高、自定义viewgroup测量
85 0