工具类DisplayUtil
package com.example.demo;
import android.content.Context;
import android.util.DisplayMetrics;
public class DisplayUtils {
private DisplayUtils(Context context){
}
private static DisplayUtils mInstance;
private static Context mContext;
public static DisplayUtils getInstance(Context context){
if(mInstance==null){
mContext = context;
mInstance = new DisplayUtils(context);
}
return mInstance;
}
public static int px2dp(int px){
DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
return (int) (metrics.density*px);
}
}
测试代码
package com.example.demo;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
ListView listContent;
ContentAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listContent = (ListView) findViewById(R.id.id_send_gift_pop_listview);
adapter = new ContentAdapter();
listContent.setAdapter(adapter);
setListViewHeightBasedOnChildren(listContent);
listContent.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
System.out.println("__old all view click");
}
});
}
public void setListViewHeightBasedOnChildren(ListView listView) {
//获取listview的适配器
ListAdapter listAdapter = listView.getAdapter(); //item的高度
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = adapter.getView(i, null, listView);
listItem.measure(0, 0); //计算子项View 的宽高 //统计所有子项的总高度
totalHeight += DisplayUtils.getInstance(this).px2dp(listItem.getMeasuredHeight())+listView.getDividerHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight;
listView.setLayoutParams(params);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private int num =4;
class ContentAdapter extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return num;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int postion, View content, ViewGroup arg2) {
// TODO Auto-generated method stub
if(content==null){
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
content = inflater.inflate(R.layout.item, null);
ViewHolder holder = new ViewHolder();
holder.view = (View) content.findViewById(R.id.view);
holder.info = (TextView) content.findViewById(R.id.info);
holder.send = (Button) content.findViewById(R.id.send);
content.setTag(holder);
}
ViewHolder holder = (ViewHolder) content.getTag();
holder.info.setText("info");
holder.info.setText("info");
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
System.out.println("__all view click");
num++;
}
});
holder.send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
System.out.println("__send view click");
num--;
adapter.notifyDataSetChanged();
}
});
return content;
}
class ViewHolder{
private View view;
private TextView info;
private Button send;
}
}
}