2015-10-22 20:26:35 ddxxll2008 阅读数 4736
  • Android事件处理重难点教学视频

    Android事件处理是Android开发中一个比较重要的知识点,该课程将通过实战讲解Android的用户事件处理,并且会讲解除了常规的基于监听的事件处理机制之外的事件处理机制--基于回调的事件处理机制,并且全程结合实战讲解。之前我们已经学习了如何实现Android的一些动画、组件等功能,但是如果用户要能方便地使用我们的Android APP,我们开发的时候就必须要考虑用户对这些控件可能进行的操作,比如单击、双击、滑动等,然后再对这些不同的用户事件进行不同的处理,从而满足用户对应用的操作需求。

    3726 人正在学习 去看看 CSDN讲师

在做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 动态添加标签及其点击事件


2014-06-24 17:25:36 fangchao3652 阅读数 4001
  • Android事件处理重难点教学视频

    Android事件处理是Android开发中一个比较重要的知识点,该课程将通过实战讲解Android的用户事件处理,并且会讲解除了常规的基于监听的事件处理机制之外的事件处理机制--基于回调的事件处理机制,并且全程结合实战讲解。之前我们已经学习了如何实现Android的一些动画、组件等功能,但是如果用户要能方便地使用我们的Android APP,我们开发的时候就必须要考虑用户对这些控件可能进行的操作,比如单击、双击、滑动等,然后再对这些不同的用户事件进行不同的处理,从而满足用户对应用的操作需求。

    3726 人正在学习 去看看 CSDN讲师

         需求:我们要点击进入一家店铺,根据不同的店铺,显示不同条数的子条目 如:消毒间,洗菜间等。。。这些都是或多或少的,所以需要动态添加:

   首先自定义View(linearLayout):

package cn.qust.fang.widget;

import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import cn.qust.fang.CHANGLIANG.ChangLiang;
import cn.qust.fang.DB.DBManager;
import cn.qust.fang.domain.Shop;
import cn.qust.fang.main.MvplayActivity123;
import cn.qust.fang.main.R;

public class RightTopChildsLayouts extends LinearLayout {
    Shop shop=null;
	private TextView text_name_sub,textview_mvurl;
	View view;
    MvplayActivity123 currentactivity;
    /**
     * 配菜间  消毒间什么的
     */
    String zi_name;
    /**\
     * 配菜间 消毒间的 的视频url
     */
    String zi_mvurl;
	public RightTopChildsLayouts(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}
//自定义构造函数
	public RightTopChildsLayouts(MvplayActivity123 context,Shop shop,String zi_name,String zi_mvurl){
		super(context );
		
	view = LayoutInflater.from(context).inflate(R.layout.sub_right_top, null);
		text_name_sub=(TextView) view.findViewById(R.id.textview1);
		/**
		 * 存mv_url
		 */
		textview_mvurl=(TextView) view.findViewById(R.id.textview_gone);
		//把获得的view加载到这个控件中
		addView(view);
		this.currentactivity=context;
		
		this.shop=shop;
		this.zi_mvurl=zi_mvurl;
		this.zi_name=zi_name;
		
		text_name_sub.setText(zi_name);
		textview_mvurl.setText(zi_mvurl);
		view.setOnClickListener(new OnClickListener(){
  //点击事件
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(!getZi_mvurl().equals("collect")){
					//若不是收藏  就切换视频
					
					System.out.println("点击=====RightTopChildsLayouts==zi_name========"+getZi_name());
							VideoView mVideoView =	currentactivity.getmVideoView();
							mVideoView.pause();
							Uri uri = Uri.parse(getZi_mvurl());
							mVideoView.setVideoURI(uri);
							mVideoView.start();
							
				}
				else {
					/**
					 * 在这里进行收藏 如果已收藏  显示已收藏
					 */
					System.out.println("点击=收藏====RightTopChildsLayouts==zi_name========"+getZi_name());
					
					if (getShop() == null)
						Toast.makeText(getContext(), "收藏失败", Toast.LENGTH_SHORT).show();
					if (!(new DBManager(getContext()).exits(getShop().getShop_id()))) {
						save2db(getShop());
					} else {
						//Toast.makeText(context, "已收藏", Toast.LENGTH_SHORT).show();
						text_name_sub.setText(R.string.haven_collected);
					}
				}
			}
			
		});
		
	}
	
	

	private void save2db(Shop shop) {

				ContentResolver resolver = getContext().getContentResolver();
				ContentValues values = new ContentValues();
				// System.out.println("baocun11前--------");
				values.put("shop_name", shop.getShopname());
				values.put("address", shop.getAddress());
				values.put("mv_url", shop.getMv_url());
				values.put("logo_url", shop.getLogo_url());
				values.put("msg", shop.getMsg());
				values.put("shop_id", shop.getShop_id());
				values.put("shop_phone", shop.getShop_phone());
             
				Uri url = Uri
						.parse("content://fang.ContentProvider.MyContentProvider_media/"
								+ ChangLiang.TABLE);
				resolver.insert(url, values);
				// System.out.println("baocun11成功-----------");
			//	Toast.makeText(getContext(), "收藏成功", Toast.LENGTH_SHORT).show();

			}
public Shop getShop() {
		return shop;
	}
	public void setShop(Shop shop) {
		this.shop = shop;
	}
public String getZi_name() {
		return zi_name;
	}
	public void setZi_name(String zi_name) {
		this.zi_name = zi_name;
	}
	public String getZi_mvurl() {
		return zi_mvurl;
	}
	public void setZi_mvurl(String zi_mvurl) {
		this.zi_mvurl = zi_mvurl;
	}
	//这个可能不太合适
	@Override
	public void setOnClickListener(OnClickListener l) {
		// TODO Auto-generated method stub
		super.setOnClickListener(l);
	//	this.currentactivity.finish();
		VideoView mVideoView =	currentactivity.getmVideoView();
		mVideoView.pause();
		Uri uri = Uri.parse(zi_name);
		mVideoView.setVideoURI(uri);
		mVideoView.start();
		mVideoView
				.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
					@Override
					public void onPrepared(MediaPlayer mediaPlayer) {
						// optional need Vitamio 4.0
						mediaPlayer.setPlaybackSpeed(1.0f);
					}
				});

		
	}

}
上面用到的sub_right_top.xml如下:

<pre name="code" class="html">	<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.aaaa.MainActivity"
    tools:ignore="MergeRootFrame">
	<LinearLayout
    		    android:layout_width="match_parent"
    		    android:layout_height="wrap_content" >

    			<!-- <ImageView
    			    android:id="@+id/imageView1"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:layout_gravity="center_vertical"
    			    android:layout_marginLeft="8dp"
    			    android:src="@drawable/mm_title_btn_compose_normal" /> -->

    			<TextView
    			    android:id="@+id/textview1"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="洗菜间"
    			    android:textColor="#fff"
    			    android:textSize="18sp" /> 
    			    <TextView
    			    android:id="@+id/textview_gone"
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="隐藏"
    			    android:textColor="#fff"
    			    android:textSize="18sp" 
    			    android:visibility="gone"
    			    /> 
    			       		    
    		</LinearLayout>
    	</RelativeLayout>




下面是动态添加的代码:在他们的父布局一加载的时候开始动态添加:

public class MainTopRightDialog extends Activity {
	// private MyDialog dialog;
	private LinearLayout layout;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_top_right_dialog);
		// dialog=new MyDialog(this);
		layout = (LinearLayout) findViewById(R.id.main_dialog_layout);

		Shop shop1 = (Shop) getIntent().getSerializableExtra("shop_inmvplayer");
		MvplayActivity123 mvplayActivity123 = MvplayActivity123.getinstance();

		List<Map<String, Object>> mv_urls_list = null;
		String mv_urls = shop1.getMv_url();
		if (!mv_urls.equals("null") && mv_urls != null && !mv_urls.equals("")) {

			try {
				mv_urls_list = (List<Map<String, Object>>) new ParseJson2List()
						.ParseJson2List(shop1.getMv_url().toString());
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			mv_urls_list = null;
			return;
		}
		RightTopChildsLayouts layout_childs = null;
		/**
		 * 根据 zi_mvurl 区分是url 还是收藏 若是收藏就为 collect
		 */
		RightTopChildsLayouts layout_collect = null; ///
		for (int i = 0; i < mv_urls_list.size(); i++) {
			layout_childs = new RightTopChildsLayouts(mvplayActivity123, shop1,
					mv_urls_list.get(i).get("_skey").toString(), mv_urls_list.get(i).get("_svalue").toString());
		if (layout_childs != null) {
		 /* 	android:layout_width="wrap_content"
		        	android:layout_height="wrap_content"
		        	android:layout_alignParentRight="true"
		        	android:layout_alignParentTop="true"*/
			layout.addView(layout_childs,130,LinearLayout.LayoutParams.WRAP_CONTENT);
		}
		
		}
		/**
		 * 添加收藏 项  若收藏过显示已收藏
		 */
		layout_collect=new RightTopChildsLayouts(mvplayActivity123, shop1,
				(new DBManager(this).exits(shop1.getShop_id())?"已收藏":"收藏"), "collect");
			layout.addView(layout_collect,130,LinearLayout.LayoutParams.WRAP_CONTENT);

	/*	layout.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(getApplicationContext(), "提示:点击窗口外部关闭窗口!",
						Toast.LENGTH_SHORT).show();
			}
		});*/
	}


	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		finish();
		return true;
	}

}
这个的布局文件(main_dialog_layout)如下:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"       
   >
   
   <RelativeLayout
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"  
       android:layout_marginTop="46dp"
       
             >
        
    	<LinearLayout
    	    android:id="@+id/main_dialog_layout"
	      	android:layout_width="wrap_content"
        	android:layout_height="wrap_content"
        	android:layout_alignParentRight="true"
        	android:layout_alignParentTop="true"
        	android:orientation="vertical"
        	android:background="@drawable/title_function_bg" >

   <!--  		<LinearLayout
    		    android:layout_width="match_parent"
    		    android:layout_height="wrap_content" 
    		    android:layout_marginBottom="3dp"
    		    >

    	

    			<TextView
    			    android:layout_width="wrap_content"
    			    android:layout_height="wrap_content"
    			    android:padding="8dp"
    			    android:text="收藏"
    			    android:textColor="#fff"
    			    android:textSize="18sp" 
    			    
    			    />   		    
    		</LinearLayout>
    -->  
        
           
       </LinearLayout>

    </RelativeLayout>
</RelativeLayout>





  

2018-02-15 14:19:52 abcnull 阅读数 3924
  • Android事件处理重难点教学视频

    Android事件处理是Android开发中一个比较重要的知识点,该课程将通过实战讲解Android的用户事件处理,并且会讲解除了常规的基于监听的事件处理机制之外的事件处理机制--基于回调的事件处理机制,并且全程结合实战讲解。之前我们已经学习了如何实现Android的一些动画、组件等功能,但是如果用户要能方便地使用我们的Android APP,我们开发的时候就必须要考虑用户对这些控件可能进行的操作,比如单击、双击、滑动等,然后再对这些不同的用户事件进行不同的处理,从而满足用户对应用的操作需求。

    3726 人正在学习 去看看 CSDN讲师

android程序中View的点击事件共有四种,除了在布局文件中为按钮设置属性外还有另外3种都用到了OnClickListener接口,只不过形式不同而已。


1.在布局文件中为按钮设置点击事件

在绑定的布局xml中有相应<Button  />中添加android:onClick="click"之后在与xml布局绑定的Activity中添加方法

public void click(View view){
      Log.i("已点击此按钮");
}


2.创建内部类

activity_main.xml中为控件设置id属性

<Button
      android:id="@+id/button1"
      …
/>

创建内部类实现OnClickListener接口

protected void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Button1.setOnClickListener(new MyButton());
      Button2.setOnClickListener(new MyButton());
}
private class MyButton implements OnClickListener{
      @Override
      public void onClick(View v){
            switch(v.getId()){
                  case R.id.button:Log.i("点击id为button的按扭");break;
                  case R.id.button1:Log.i("点击id为button1的按扭");break;
             }
      }
}


3.主类中实现OnClickListener接口

public class MainActivity extends Activity implements OnClickListener{
      protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button button1=setOnClickListener(this);
            Button button2=setOnClickListener(this);
      }
      @Override
      public void onClick(View v){
            switch(v.getId()){
                  case R.id.button:Log.i("点击id为button的按扭");break;
                  case R.id.button1:Log.i("点击id为button1的按扭");break;
             }
      }
}



4.匿名内部类

Button button1=(Button) findViewById(R.id.button1);
button1.setOnclickListener(new OnClickListener(){
      @Override
      public void onClick(View v){
            Log.i("通过匿名内部类的监听器实现绑定点击button1事件");
      }
});


注意:在实现OnClickListener接口时,为按钮设置点击事件要导入android.view.View包。

这几种方式都不难理解,方式1最好理解,本人常使用方式3。

2017-12-14 13:46:56 JustWantToFly 阅读数 589
  • Android事件处理重难点教学视频

    Android事件处理是Android开发中一个比较重要的知识点,该课程将通过实战讲解Android的用户事件处理,并且会讲解除了常规的基于监听的事件处理机制之外的事件处理机制--基于回调的事件处理机制,并且全程结合实战讲解。之前我们已经学习了如何实现Android的一些动画、组件等功能,但是如果用户要能方便地使用我们的Android APP,我们开发的时候就必须要考虑用户对这些控件可能进行的操作,比如单击、双击、滑动等,然后再对这些不同的用户事件进行不同的处理,从而满足用户对应用的操作需求。

    3726 人正在学习 去看看 CSDN讲师

LinearLayout LP=new LinearLayout(context);
final EditText editText=new EditText(context);
//editText.setHeight(47);
editText.setId(i);
Log.i("当前添加的文本框ID:",String.valueOf(editText.getId()));
editText.setHint(R.string.txthint);
editText.setBackgroundResource(R.drawable.table_shape2);//设置自定义样式(使用的是drawable文件夹中的xml文件)

/*设置EditText组件值改变监听事件*/
editText.addTextChangedListener(new TextWatcher() {
	@Override
	public void beforeTextChanged(CharSequence s, int start, int count, int after) {
		//Log.i("文本输入框值改变事件:",s.toString());
	}

	/**
	 *值改变事件
	 * @param s       文本框输入的值
	 * @param start   输入的起始位置(索引)
	 * @param before
	 * @param count
	 */
	@Override
	public void onTextChanged(CharSequence s, int start, int before, int count) {

		//从内部类中访问本地变量editText; 需要被声明为最终类型(用final修饰)
		int editTxtId= editText.getId();
		LinearLayout editTextParent= (LinearLayout) editText.getParent();//获取当前编辑的文本输入框的父控件
		/*
		* 获取当前文本编辑框所在的行对象(由于文本编辑框外嵌套了一个LinearLayout控件
		* 因此需要先获取文本边框的父控件)*/
		TableRow tr= (TableRow) editTextParent.getParent();
		Log.i("当前编辑行索引:",String.valueOf(tr.getId()));
		//设置第一列中CheckBox的状态为选中状态(注意布局时CheckBox外层嵌套一个LinearLayout组件)
		((CheckBox)((LinearLayout)tr.getChildAt(0)).getChildAt(0)).setChecked(true);
	}

	@Override
	public void afterTextChanged(Editable s) {
	   // Log.i("文本输入框值改变事件:",s.toString());
	}
});
LP.setBackgroundResource(R.drawable.table_shape);
LP.addView(editText);




2012-03-28 23:11:15 kkk0526 阅读数 4175
  • Android事件处理重难点教学视频

    Android事件处理是Android开发中一个比较重要的知识点,该课程将通过实战讲解Android的用户事件处理,并且会讲解除了常规的基于监听的事件处理机制之外的事件处理机制--基于回调的事件处理机制,并且全程结合实战讲解。之前我们已经学习了如何实现Android的一些动画、组件等功能,但是如果用户要能方便地使用我们的Android APP,我们开发的时候就必须要考虑用户对这些控件可能进行的操作,比如单击、双击、滑动等,然后再对这些不同的用户事件进行不同的处理,从而满足用户对应用的操作需求。

    3726 人正在学习 去看看 CSDN讲师

  tv_title.setClickable(true);
     tv_title.setFocusable(true);
     // 增加TextView的点击事件
     // 单击事件
     // 单击事件
     tv_title.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
       // model_banmianParameters cs_model_banmianParameters =
       // (model_banmianParameters) v
       // .getTag();
       // click_openPage(cs_model_banmianParameters);
       //
      }
     });

Android view点击事件

阅读数 380

没有更多推荐了,返回首页