当前位置:  编程技术>移动开发
本页文章导读:
    ▪分享30个带给您灵感的书法作品        分享30个带给你灵感的书法作品 日期:2012-4-7  来源:GBin1.com 设计中我们经常使用各种书法字体,但是这种书法字体并不是很常见。本篇文章中我们收集了30个超棒的英文书法字体作品,希.........
    ▪ Makefile学习(七)        Makefile学习(7) makefile还有一些系统的函数,在此就不一一列举l了。今天学习学习伪目标和隐含规则。 1.伪目标   在第一讲中的例子中有如下代码: clean: rm edit main.o kbd.o  这.........
    ▪ ListView自定义adapter处置多事件       ListView自定义adapter处理多事件 使用过ListView 的开发人员都知道,ListView 在一般情况下只能对每条记录设置一个监听事件。如果想在其中添加多个事件,就需要自定义Adapter 。   下面介绍一.........

[1]分享30个带给您灵感的书法作品
    来源: 互联网  发布时间: 2014-02-18
分享30个带给你灵感的书法作品

日期:2012-4-7  来源:GBin1.com

设计中我们经常使用各种书法字体,但是这种书法字体并不是很常见。本篇文章中我们收集了30个超棒的英文书法字体作品,希望大家喜欢!

Ornamental Lettering

Welcome to Transylvania

Poems in Calligraphy

...

原文来自:分享30个带给你灵感的书法作品


    
[2] Makefile学习(七)
    来源: 互联网  发布时间: 2014-02-18
Makefile学习(7)

makefile还有一些系统的函数,在此就不一一列举l了。今天学习学习伪目标和隐含规则。

1.伪目标

 

在第一讲中的例子中有如下代码:

clean:
               rm   edit main.o  kbd.o 

 这里“clean”就是一个伪目标。

 

我们在编译的过程中生成了许多编译文件,那么也应该提供一个清除它们的“目标”以备完整的重新编译而用。(例如:make clean实现文件的清除)。

 

因为我们并不生成“clean”这个文件,所以称其为“伪目标”。

  • “伪目标”并不是一个文件,只是一个标签,由于“伪目标”不是文件,所以make无法生成它的依赖关系和决定它是否要执行。所以我们只有通过显示的指明这个“目标”才能让其生效。
  • “伪目标”的取名不能和文件名重名,否则就失去了“伪目标”的意义了。

为了避免和文件重名,我们可以使用一个特殊的标记,“.PHONY”来显示地指明一个目标是“伪目标”,向make说明,不管是否有这个文件,这个目标就是“伪目标”。例如:

 

.PHONY:clean

 只要有这个声明,不管是否有“clean”文件,要运行“clean”这个目标,只有“make clean”。于是整个过程可以这样写:

 

.PHONY:clean
clean:
           rm *.o  temp
  •   伪目标一般没有依赖文件。但是我们也可以为伪目标指定所依赖的文件。伪目标同样可以作为“默认目标”
方法:只要将其放在第一个。 例如:需要makefile一次生成若干个可执行文件,但是只想简单的一次make完事,并且所有的目标文件都写在一个makefile中,就可以使用“伪目标”这个特性。
all:prog1  prog2  prog3
.PHONY:all
prog1:prog1.o utils.o
        cc -o prog1 prog1.o utils.o
prog2:prog2.o
        cc -o prog2 prog2.o
prog3:prog3.o sort.o utils.o
        cc -o prog3 prog3.o sort.o utils.o
  一些约定俗成的伪目标:(当然也可以重新命名而不使用这些名称)
  • all:这个伪目标是所有目标的目标,其功能一般是编译所有的目标
  • clean:这个伪目标的功能是删除所有被make创建的文件
  • install:这个伪目标的功能是安装已经编译好的程序,其实就是把目标执行文件copy到指定目标中去
  • print:这个伪目标的功能是列出改变过的源文件
  • tar:这个伪目标的功能是把源程序打包备份,也就是一个tar文件
  • dist:这个伪目标的功能是创建一个压缩文件,一般是把tar文件压成z文件或者gz文件
  • TAGS:这个伪目标的功能是更新所有的目标,以备完整的重新编译使用
  • check和test这个伪目标一般用来测试makefie的流程

 

2.隐含规则

“隐含规则”也就是早先约定了的,不需要我们写出来的规则,它是一种惯例。例如,把[.c]文件编译成[.o]文件这个规则,就可以不用写出来,make会自动推导出这种规则,并生成我们需要的[.o]文件。

例如:

foo:foo.o bar.o
      cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)

 以上的代码中并没有写下如何生成foo.o  bar.o这两个目标的规则和命令

  • CFLAGS:C语言编译器的参数。
  • LDFLAGS:链接器参数
注:
  • 如果我们 [.o]文件书写了自己的规则,那么make就不会自动推导并调用隐含规则了。
  • 在make的“隐含规则库”中,每一条隐含规则都在库中有其顺序,越靠前的则是越被经常使用的,所以,这会导致我们有些时候即使我们显示地指定了目标依赖,make也不会管。
例如这条规则(没有命令): :
foo.o:foo.p
 依赖文件“foo.p”有可能变得没有意义。 如果目录下存在 了“foo.c”文件,那么我们的隐含规则一样会生效,并会通过“foo.c”调用C的编译器生成foo.o文件。 因为,在隐含规则中,Pascal的规 则出现在C的规则之后,所以,make找到可以生成foo.o的C的规则就不再寻找下一条规则了。
所以如果确实不希望任何隐含规则推导,则需要明确写出命令。
就写到这啦,下次继续,因为这个我理解的还很浅显啦!

 

 


    
[3] ListView自定义adapter处置多事件
    来源: 互联网  发布时间: 2014-02-18
ListView自定义adapter处理多事件

使用过ListView 的开发人员都知道,ListView 在一般情况下只能对每条记录设置一个监听事件。如果想在其中添加多个事件,就需要自定义Adapter 。

 

下面介绍一下如何自定义adapter 以及如何在一个Item 中绑定多个事件。

这里我们需要两个XML 文件、两个java 类。分别是存放ListView 的XML 、ListViewItem 的XML 、Activity 类和Adapter 类。

 

首先说说两个XML 文件。

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding= "10dip" 
    android:orientation="vertical" >

    <ListView 
        android:id="@id/android:list" 
        android:layout_width = "fill_parent" 
        android:layout_height = "fill_parent" /> 

</LinearLayout>

 

注意:这里的ListView 中id 使用了android 自定义的: @id/android:list

 

lvItem.xml

 

<?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="wrap_content"
    android:descendantFocusability="blocksDescendants"
    android:padding="5dip" >

    <ImageView
        android:id="@+id/ItemImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dip" />

    <ImageButton
        android:id="@+id/ItemCloseWin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/ItemWinName"
        android:layout_alignTop="@+id/ItemWinName"
        android:layout_alignParentRight="true"
        android:background="#e0000000"
        android:focusable="false"
        android:gravity="left|center_vertical"
        android:src="/blog_article/@android_drawable/ic_menu_close_clear_cancel/index.html" />

    <ImageButton 
        android:id="@+id/ItemEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/ItemWinName"
        android:layout_alignTop="@id/ItemWinName"
        android:layout_toLeftOf="@id/ItemCloseWin"
        android:background="#e0000000"
        android:focusable="false"
        android:gravity="left|center_vertical"
        android:src="/blog_article/@android_drawable/ic_dialog_email/index.html" />
    
    <TextView
        android:id="@+id/ItemWinName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/ItemImage"
        android:layout_alignTop="@id/ItemImage"
        android:layout_toLeftOf="@id/ItemEmail"
        android:layout_toRightOf="@id/ItemImage"
        android:gravity="left|center_vertical"
        android:text="title"
        android:textSize="20dip" />

</RelativeLayout>

 

 

接下来看看Activity

 

package cn.mutil;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
 * ListView item 多事件Activity
 * @author lihua
 *
 */
public class LvWithButtonActivity extends ListActivity {

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

		// 关联Layout中的ListView
		ListView vncListView = (ListView) findViewById(android.R.id.list);

		// 生成动态数组,加入数据
		ArrayList<HashMap<String, Object>> remoteWindowItem = new ArrayList<HashMap<String, Object>>();
		for (int i = 0; i < 10; i++) {
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("ItemImage", R.drawable.ic_launcher); // 图像资源的ID
			map.put("ItemWinName", "Window ID " + i);
			map.put("ItemEmail", android.R.drawable.ic_dialog_email);
			map.put("ItemCloseWin",	android.R.drawable.ic_menu_close_clear_cancel);
			remoteWindowItem.add(map);
		}

		// 生成适配器的Item和动态数组对应的元素
		LvButtonAdapter listItemAdapter = new LvButtonAdapter(this,
				remoteWindowItem, // 数据源
				R.layout.lvitem, // ListItem对应的XML
				// 动态数组与ImageItem对应的子项
				new String[] { "ItemImage", "ItemWinName","ItemEmail", "ItemCloseWin" },
				// ImageItem的XML文件里面的一个ImageView,两个TextView ID
				new int[] { R.id.ItemImage, R.id.ItemWinName, R.id.ItemEmail, R.id.ItemCloseWin });

		vncListView.setAdapter(listItemAdapter);
		
		/**
		 * 设置整个Item被点击的事件
		 * 该事件在其他有事件的组件未被点击时触发
		 */
		vncListView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> adapter, View view, 
					int position,long arg3) {
				
				TextView content = (TextView)view.findViewById(R.id.ItemWinName);
				Toast.makeText(LvWithButtonActivity.this, content.getText().toString() , Toast.LENGTH_SHORT).show();
			}
			
		});
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);
		l.getItemAtPosition(position);
	}

}

 

最后一个也是最重要的一个,自定义adapter

 

package cn.mutil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class LvButtonAdapter extends BaseAdapter {

	private class ButtonViewHolder {
		ImageView appIcon;
		TextView appName;
		ImageButton buttonEmail;
		ImageButton buttonClose;
	}

	private ArrayList<HashMap<String, Object>> mAppList;//用于存放传递过来显示于ListView中的 数据
	private LayoutInflater mInflater;
	private Context mContext;
	private String[] keyString;
	private int[] valueViewID;
	private ButtonViewHolder holder;

	public LvButtonAdapter(Context c,//上下文
			ArrayList<HashMap<String, Object>> appList,//绑定数据 
			int resource00000,//ListView行记录layout
			String[] from, 
			int[] to) {
		mAppList = appList;
		mContext = c;
		mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		keyString = new String[from.length];
		valueViewID = new int[to.length];
		System.arraycopy(from, 0, keyString, 0, from.length);
		System.arraycopy(to, 0, valueViewID, 0, to.length);
	}

	@Override
	public int getCount() {
		return mAppList.size();
	}

	@Override
	public Object getItem(int position) {
		return mAppList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}
	/**
	 * 删除数据集中的值
	 * @param position
	 */
	public void removeItem(int position) {
		mAppList.remove(position);
		this.notifyDataSetChanged();
	}
	
	/**
	 * 改变数据集中的值
	 * @param position
	 * @param map
	 */
	public void changeItem(int position,HashMap<String, Object> map){
		mAppList.remove(position);
		mAppList.add(position, map);
		this.notifyDataSetChanged();
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if (convertView != null) {
			holder = (ButtonViewHolder) convertView.getTag();
		} else {
			convertView = mInflater.inflate(R.layout.lvitem, null);
			holder = new ButtonViewHolder();
			holder.appIcon = (ImageView) convertView
					.findViewById(valueViewID[0]);//可以将valueViewID[0]替换成R.id.xxx
			holder.appName = (TextView) convertView
					.findViewById(valueViewID[1]);
			holder.buttonEmail = (ImageButton) convertView
					.findViewById(valueViewID[2]);
			holder.buttonClose = (ImageButton) convertView
					.findViewById(valueViewID[3]);
			convertView.setTag(holder);
		}

		HashMap<String, Object> appInfo = mAppList.get(position);
		if (appInfo != null) {
			String aname = (String) appInfo.get(keyString[1]);
			int mid = (Integer) appInfo.get(keyString[0]);
			int eid = (Integer) appInfo.get(keyString[2]);
			int bid = (Integer) appInfo.get(keyString[3]);
			
			holder.appName.setText(aname);
			holder.appName.setOnClickListener(new LvButtonListener(position));
			holder.appIcon.setImageDrawable(holder.appIcon.getResources().getDrawable(mid));			
			holder.buttonEmail.setImageDrawable(holder.buttonEmail.getResources().getDrawable(eid));
			holder.buttonEmail.setOnClickListener(new LvButtonListener(position));			
			holder.buttonClose.setImageDrawable(holder.buttonClose.getResources().getDrawable(bid));
			holder.buttonClose.setOnClickListener(new LvButtonListener(position));
		}
		return convertView;
	}
	
	/**
	 * 按钮事件监听
	 * @author lihua
	 *
	 */
	private class LvButtonListener implements View.OnClickListener {
		private int position;

		LvButtonListener(int pos) {
			position = pos;
		}

		@Override
		public void onClick(View v) {
			int vid = v.getId();
			
			HashMap<String, Object> curMap = (HashMap<String, Object>)getItem(position);		
			
			if (vid == holder.buttonClose.getId()){	//删除一行记录
				
				Toast.makeText(mContext,"position:"+position+",data is being Deleted", Toast.LENGTH_LONG).show();
				removeItem(position);
				//可以在这里操作数据库或更新服务端数据
				
			}else if(vid == holder.buttonEmail.getId()){//发送邮件
				
				Toast.makeText(mContext, "position:"+position+",sending email to xxx!", 
						Toast.LENGTH_SHORT).show();
				//可以在这里操作数据库或更新服务端数据
				
			}else if(vid == holder.appName.getId()){//设置名称
				
				Toast.makeText(mContext, "position is "+position+", appName:"+curMap.get("ItemWinName").toString(), 
						Toast.LENGTH_SHORT).show();
				curMap.put("ItemWinName", System.currentTimeMillis()+"");
				changeItem(position,curMap);
				//可以在这里操作数据库或更新服务端数据
				
			}
		}
	}

}

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3