Android实现动态添加标签及其点击事件

在做Android开发的时候,会遇到动态添加标签让用户选择的功能,所以自己写了个例子,运行效果图如下。

标签可以左右滑动进行选择,点击的时候,会弹出toast提示选择或者取消选择了哪个标签。通过动态添加TextView作为标签,并给TextView设置背景,通过selector选择器改变其背景颜色,来确定是否处于选中状态。

代码如下所示:

1、标签的布局文件,我在标签里只设置了一个TextView

<?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:orientation="vertical" >

 <TextView
  android:id="@+id/textView1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_margin="10dp"
  android:background="@drawable/mark_select"
  android:enabled="false"
  android:padding="10dp"
  android:text="TextView" />

</LinearLayout>

2、在res文件夹下新建drawable文件夹,标签的背景设为@drawable/mark_select,代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

 <item android:drawable="@drawable/mark_notbeselected" android:state_enabled="false"/>
 <item android:drawable="@drawable/mark_beselected" android:state_enabled="true"/>

</selector>

当标签处于选中状态,背景为@drawable/mark_beselected,当标签处于未选中状态,背景为@drawable/mark_notbeselected

其中mark_notbeselected代码为:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

 <solid android:color="#ffffff" />

 <corners android:radius="3dip" />

 <stroke
  android:width="1dip"
  android:color="#1cb0ba" />

</shape>

mark_beselected代码为:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

 <solid android:color="#1cb0ba" />

 <corners android:radius="3dip" />

 <stroke
  android:width="1dip"
  android:color="#1cb0ba" />

</shape>

3、主页面布局文件里包括一个水平滚动条HorizontalScrollView,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" >

 <HorizontalScrollView
  android:id="@+id/horizontalScrollView1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >

  <LinearLayout
   android:id="@+id/linearLayout1"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="horizontal" >
  </LinearLayout>
 </HorizontalScrollView>

</LinearLayout>

4、MainActivity.java代码如下所示:

public class MainActivity extends Activity {

 List<String> list;
 private LinearLayout linearLayout;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 linearLayout = (LinearLayout) findViewById(R.id.linearLayout1);
 //添加标签内容
 list = new ArrayList<String>();
 for (int i = 0; i < 10; i++) {
 String str = "标签" + i;
 list.add(str);
 }
 //初始化标签
 initMarksView();
 }
 private void initMarksView() {
 for (int i = 0; i < list.size(); i++) {
 View view = View.inflate(MainActivity.this, R.layout.mark_layout, null);
 TextView tv = (TextView) view.findViewById(R.id.textView1);
 tv.setText(list.get(i));
 tv.setTag(i);
 view.setTag(false);
 // 设置view的点击事件,与onClick中的View一致
 //否则需要在onClick中,去findViewById,找出设置点击事件的控件进行操作
 //若不如此,则无法触发点击事件
 view.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  TextView tv = (TextView) v.findViewById(R.id.textView1);
  Log.i("dxl", "TextView click");
  if ((Boolean) v.getTag()) {
  v.setTag(false);
  tv.setEnabled(false);
  Toast.makeText(MainActivity.this, "你取消了选择标签" + tv.getTag(), Toast.LENGTH_SHORT).show();
  } else {
  v.setTag(true);
  tv.setEnabled(true);
  Toast.makeText(MainActivity.this, "你选择了标签" + tv.getTag(), Toast.LENGTH_SHORT).show();
  }
 }
 });
 linearLayout.addView(view);
 }
 }
}

至此,便实现了动态添加表情,并可以处理标签点击事件的功能。

源代码下载:Android动态添加标签及其点击事件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android如何动态调整应用字体大小详解

    前言 为什么要动态设置字体大小?由于项目面对的是中老年客户项目中自带的字体无法满足客户需求. Android应用字体大小默认随系统设置的字体大小而变化,但您可能不希望您的应用字体大小随系统设置变化,想要自己控制,例如微信.本文简单介绍一下如何实现应用字体大小动态调整而不是依赖系统设置 字体大小变化是由android.content.res.Configuration.class类中的fontScale控制的,因此,若想我们的应用字体大小变化不随系统变化而是由我们自主控制,就需要我们修改fontS

  • Android 6.0动态权限及跳转GPS设置界面的方法

    1.动态权限申请 模糊的位置信息android.permission.ACCESS_COARSE_LOCATION权限为例 在AndroidManifest文件中加入权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 然后java代码中动态申请 //动态申请权限的测试方法 public void test() { // 要申请的权限 数组 可以同时申请多个权限 Stri

  • Android绘制动态折线图

    所谓动态折线图,就是折线图能随着手指的滑动进行动态绘制,这里很定会产生动画效果.基于这个效果,这里使用SurfaceView进行制图. 实现步奏如下: (1): 这里新建一个绘图ChartView,继承SurfaceView并实现SurfaceHolder.Callback , Runnable接口,主要绘图工作在子线程中完成. (2):现实 SurfaceHolder.Callback接口的三个方法,并在 surfaceCreated中开启子线程进行绘图. (3):重写onTouchEvent

  • android动态壁纸调用的简单实例

    调用后动态壁纸其实是显示在Activity的后面,而Activity则是透明显示,这样就可以看到下面的动态壁纸,如果Activity不是透明的则什么也看不到. 代码中有用到两个接口 IWallpaperService mService; IWallpaperEngine mEngine; 我们可以看到该目录下面有三个aidl接口,分别是 复制代码 代码如下: interface IWallpaperConnection { void attachEngine(IWallpaperEngine e

  • Android编程之动态壁纸实例分析

    本文实例讲述了Android编程之动态壁纸.分享给大家供大家参考,具体如下: 从android 2.1版本起引入了动态壁纸的概念,熟悉android的人一定不会陌生.这里解释一个动态壁纸是怎么形成又是怎么工作的. 首先动态桌面的动态体现出这个组件是实时变化的,也就是说有一个后台在不停的刷新这个组件.联想到后台组件首先想到的就是service,从代码角度看,果然如此.每一个动态桌面都继承自WallpaperService,其中必须实现的抽象方法onCreateEngine,返回一个Engine对象

  • Android动态修改应用图标与名称的方法实例

    遇到的坑 这里我把做这个功能中遇到的一些问题写在前面,是为了大家能先了解有什么问题存在,遇到这些问题的时候就不慌了,这里我把应用图标和名称先统一使用icon代替进行说明. 1.动态替换icon,只能替换内置的icon,无法从服务器端获取来更新icon: 2.动态替换icon以后,应用内更新的时候必须要切换到原始icon),否则可能导致更新安装失败(AS上表现为adb运行会失败),或者升级后应用图标出现多个甚至应用图标都不显示的情况(这些问题都可以通过下面我推荐的开发规则解决掉,所以这是一个坑点,

  • Android自定义动态壁纸开发详解

    看到有些手机酷炫的动态壁纸,有没有好奇过他们是如何实现的,其实我们自己也可以实现. 一.动态壁纸原理 如果你了解使用过SurfaceView的话,那么开发一款动态壁纸对你来说其实非常简单. 动态壁纸的本质其实就是一个服务在维护一个动态壁纸引擎Engine,所以我们看到的动态效果其实是通过这个引擎画出来的.而维护这个引擎的服务,就是WallpaperService.本篇文章并不讨论内部实现原理,只是让大家知道如何去实现动态壁纸,所以就不详细说了. 二.实现动态壁纸 大体上可分为三个步骤: 创建自定

  • Android 中使用 dlib+opencv 实现动态人脸检测功能

    1 概述 完成 Android 相机预览功能以后,在此基础上我使用 dlib 与 opencv 库做了一个关于人脸检测的 demo.该 demo 在相机预览过程中对人脸进行实时检测,并将检测到的人脸用矩形框描绘出来.具体实现原理如下: 采用双层 View,底层的 TextureView 用于预览,程序从 TextureView 中获取预览帧数据,然后调用 dlib 库对帧数据进行处理,最后将检测结果绘制在顶层的 SurfaceView 中. 2 项目配置 由于项目中用到了 dlib 与 open

  • Android自定义动态壁纸开发(时钟)

    看到有些手机酷炫的动态壁纸,有没有好奇过他们是如何实现的,其实我们自己也可以实现. 先看效果 上图是动态壁纸钟的一个时钟. 我们先来看看 Livewallpaper(即动态墙纸)的实现,Android的动态墙纸并不是GIF图片,而是一个标准的Android应用程序,也就是APK.既然是应用程序,当然意味着天生具有GIF图片不具备的功能--能与用户发生交互,而且动态的背景变化绝不仅仅局限于GIF图片那般只能是固定的几张图片的循环播放.但是我们在这里没有加入与用户交互的动作,只是加入一个时钟(当然时

  • Android底部导航栏的动态替换方案

    Android底部导航栏的动态替换方案,供大家参考,具体内容如下 1.通常来说,一般情况下,我们的app的BottomTab会有下面几种实现方式. 1).自定义view,然后自己写逻辑去实现互斥. 2).使用RadioGroup+RadioButton去实现底部的Tab. 自由度比极高,如果想实现搞复杂度的话可以重写 RadioButton. 3).使用google design包里面的 TabLayout去实现. 可上.可下.可以滑动 偷懒的话可以根据已有api来设置一些资源,也可以 setC

随机推荐