學(xué)習(xí)了ListView察纯,可以做一個(gè)簡(jiǎn)易的對(duì)話形式的列表绊含,再加上對(duì)話框峻凫,就可以完成長(zhǎng)按文本彈出選項(xiàng)的形式,沒(méi)有什么功能純布局刹衫。
1、制作.9圖
手機(jī)上截出一張微信對(duì)話的圖搞挣,然后在phototshop里手動(dòng)測(cè)量好最小對(duì)話框(我理解的是發(fā)一個(gè)字母就是最小的對(duì)話框)的像素尺寸带迟,顏色代碼,然后利用ps的圖形繪制柿究,我采用的是一個(gè)圓角矩形和三角形合成的邮旷。
-
打開android sdk->tools->draw9path.bat。在輸入法為英語(yǔ)時(shí)它會(huì)打開如圖所示
-
file-open-9-path...打開你要制作的.9圖的原圖蝇摸,然后按照左上決定縮放區(qū)域婶肩,右下決定內(nèi)容顯示區(qū)域的原則,制作好一張.9圖
右邊顯示的就是你的對(duì)話框在不同縮放情況下內(nèi)容顯示的區(qū)域貌夕,粉紅色區(qū)域就是我選擇的縮放區(qū)域律歼,這樣,對(duì)話框就會(huì)向下縮放
關(guān)于圖片的位置就是說(shuō)在資源文件里的位置啡专,參考了郭大神的這篇文章drawable的微技巧险毁,現(xiàn)在主流的手機(jī)都可以支持drawable-xhdpi的圖片,親測(cè)放在這里面顯示效果是極好的们童。
2畔况、顯示兩個(gè)不同的布局
- 參考我在csdn上看到的博客getItemViewType(),循環(huán)顯示兩個(gè)不同的布局文件慧库,和對(duì)話內(nèi)容跷跪。然后為
TextView
設(shè)置長(zhǎng)按點(diǎn)擊事件,彈出一個(gè)列表齐板,有兩種方式
- 直接彈出對(duì)話框吵瞻,對(duì)話框
AlertDialog.Builder
提供了一個(gè)setAdapter()
方法設(shè)置對(duì)話框的內(nèi)容葛菇,后來(lái)我覺(jué)得更好的是用setView()
直接傳入一個(gè)View組件,這樣靈活性就比較強(qiáng) - 直接彈出一個(gè)菜單橡羞,為TextView注冊(cè)一個(gè)上下文菜單ContextMenu眯停,這樣也可為每個(gè)菜單項(xiàng)設(shè)置監(jiān)聽事件
- 代碼
- 下面是適配器的代碼
class MyAdapter extends BaseAdapter{
private Context mContext;
private LayoutInflater mLayoutInflater;
//兩種樣式的代號(hào)
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPERATOR = 1;
private static final int TYPE_MAX_COUNT = TYPE_SEPERATOR + 1;
private List mData = new ArrayList();
private TreeSet mSeperator = new TreeSet();
private List<String> mDataList;
public void addItem(final int item){
mData.add(item);
notifyDataSetChanged();
}
public void addSeperator(final int item){
mData.add(item);
mSeperator.add(mData.size() - 1);
}
public MyAdapter(Context context, List<String> DataList){
this.mDataList = DataList;
this.mContext = context;
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public int getItemViewType(int position) {
return mSeperator.contains(position)? TYPE_SEPERATOR : TYPE_ITEM;
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder = null;
int type = getItemViewType(i);
if (view == null){
viewHolder = new ViewHolder();
switch (type){
case TYPE_ITEM:
view = mLayoutInflater.inflate(R.layout.activity_you,null);
viewHolder.mTextView = (TextView) view.findViewById(R.id.you_text);
break;
case TYPE_SEPERATOR:
view = mLayoutInflater.inflate(R.layout.activity_my, null);
viewHolder.mTextView = (TextView) view.findViewById(R.id.my_text);
break;
}
view.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.mTextView.setText(mDataList.get(i));
viewHolder.mTextView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
//長(zhǎng)按事件彈出一個(gè)對(duì)話框
public boolean onLongClick(View view) {
AlertDialog.Builder b = new AlertDialog.Builder(mContext);
b.setAdapter(MainActivity.simple,null);
b.create()
.show();
return false;
}
});
return view;
}
}
class ViewHolder{
TextView mTextView;
}
- MainActivity
import android.content.Context;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeSet;
public class MainActivity extends AppCompatActivity {
public static SimpleAdapter simple;
ListView mListView;
private String[] select_items = {"復(fù)制", "轉(zhuǎn)發(fā)" , "收藏"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<String> stringList = new ArrayList<String>();
stringList.add("錦瑟無(wú)");
stringList.add("莊生托杜鵑");
stringList.add("滄海月明珠有淚,藍(lán)田日暖玉生煙");
stringList.add("滄海月明珠有淚卿泽,藍(lán)田日暖玉生煙");
stringList.add("此情可待成追憶莺债,只是當(dāng)時(shí)已惘然,,只是當(dāng)時(shí)已惘然,又厉,只是當(dāng)時(shí)已惘然,九府,只是當(dāng)時(shí)已惘然");
stringList.add("此情可待成追憶,只是當(dāng)時(shí)已惘然,覆致,只是當(dāng)時(shí)已惘然,侄旬,只是當(dāng)時(shí)已惘然,,只是當(dāng)時(shí)已惘然");
stringList.add("此情可待成追憶煌妈,只是當(dāng)時(shí)已惘然,儡羔,只是當(dāng)時(shí)已惘然,,只是當(dāng)時(shí)已惘然,璧诵,只是當(dāng)時(shí)已惘然");
stringList.add("此情可待成追憶汰蜘,只是當(dāng)時(shí)已惘然,,只是當(dāng)時(shí)已惘然,之宿,只是當(dāng)時(shí)已惘然,族操,只是當(dāng)時(shí)已惘然");
stringList.add("此情可待成追憶,只是當(dāng)時(shí)已惘然,比被,只是當(dāng)時(shí)已惘然,色难,只是當(dāng)時(shí)已惘然,,只是當(dāng)時(shí)已惘然");
stringList.add("此情可待成追憶等缀,只是當(dāng)時(shí)已惘然,枷莉,只是當(dāng)時(shí)已惘然,,只是當(dāng)時(shí)已惘然,尺迂,只是當(dāng)時(shí)已惘然");
stringList.add("此情可待成追憶笤妙,只是當(dāng)時(shí)已惘然,,只是當(dāng)時(shí)已惘然,噪裕,只是當(dāng)時(shí)已惘然,蹲盘,只是當(dāng)時(shí)已惘然");
mListView = (ListView) findViewById(R.id.line1);
MyAdapter myAdapter = new MyAdapter(MainActivity.this, stringList);
for (int i = 0; i < stringList.size(); i++) {
if (i % 2 == 0) {
myAdapter.addItem(i);
} else {
myAdapter.addSeperator(i);
}
}
mListView.setAdapter(myAdapter);
List<Map<String ,Object>> list_selct_items = new ArrayList<Map<String, Object>>();
for (int i = 0;i<select_items.length; i++){
Map<String,Object> list_slect_item = new HashMap<String, Object>();
list_slect_item.put("select",select_items[i]);
list_selct_items.add(list_slect_item);
}
simple = new SimpleAdapter(this,list_selct_items,R.layout.activity_item
, new String[]{"select"}, new int[]{R.id.text2});
}
}
- 布局文(兩個(gè)不同布局只是背景不同而已):activity_my
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp">
<TextView
android:id="@+id/my_text"
android:textSize="14sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="250dp"
android:layout_alignParentRight="true"
android:background="@drawable/my"/>
</RelativeLayout>
ListView:activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/line1"
<!--設(shè)置透明分割線-->
android:dividerHeight="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout>
activity_item
<?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">
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:padding="6dp"/>
</LinearLayout>