Android中如何在代码中设置View的宽和高?

Android中如何在代码中设置View的宽和高?,第1张

//在代码中设置控件大小的方法
private Button mbtn;
mbtn = (Button) findViewById(Ridbtn_test);
LayoutParams lp;
lp=mbtngetLayoutParams();
lpwidth=100;
lpheight=200;
mbtnsetLayoutParams(lp);
//在代码中设置界面大小的方法:
Display display = getWindowManager()getDefaultDisplay(); // 为获取屏幕宽、高
Window window = getWindow();
LayoutParams windowLayoutParams = windowgetAttributes(); // 获取对话框当前的参数值
windowLayoutParamswidth = (int) (displaygetWidth() 07); // 宽度设置为屏幕的095
windowLayoutParamsheight = (int) (displaygetHeight() 01); // 高度设置为屏幕的06
windowLayoutParamsalpha = 05f;// 设置透明度

只有在一个控件的 onMeasure()方法被执行过后,才能使用getMeasuredWidth()取得正确的值,childmeasure(childWidthSpec, childHeightSpec); 这个方法里面会调用onMeasure()。

1定义Adapter
public class SignalListAdapter extends BaseAdapter {
//信标数组-存储信标名字
private String[] DataList;
private Context mContext;
public SignalListAdapter(Context context, List<String> DataList){
super();
thisDataList=DataListtoArray(new String[]{});
thismContext = context;
}

@Override
public int getCount() {
return DataListlength;
}

public void setData( List<String> DataList){
thisDataList=DataListtoArray(new String[]{});
}

@Override
public Object getItem(int position) {
return isOnline[position];
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int index, View convertView, ViewGroup parent) {
if (convertView==null){
convertView=Viewinflate(mContext,Rlayoutfragment_item,null);
}
//设置fragment中的textview
TextView tx=convertViewfindViewById(Ridfragment_text);
txsetText(DataList[index]);
//设置imageview里单独的click监听
ImageView iv_setting=convertViewfindViewById(Ridiv_setting);
iv_settingsetOnClickListener(new ViewOnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(mContext,Settingsclass);
intentputExtra("Data",DataList[index]);
mContextstartActivity(intent);
}
});
//设置整个fragment的监听
convertViewsetOnClickListener(new ViewOnClickListener() {
@Override
public void onClick(View v) {
Intent intent;
intent=new Intent(mContext,BDMapActivityclass);
intentputExtra("Data",DataList[index]);//
mContextstartActivity(intent);
}
});

return convertView;
}
}
这里主要是写getItemId,getItem,getCount,getView这几个方法,Adapter里应该定义这段动态生成所需要的数据是什么,然后在构造函数里进行赋值,getView的方法就是对于动态生成里的每个子项该怎么设置textview,设置监听之类的。
除此之外,还应该自己写个setData方法,用于重新给private的数据进行赋值,告诉Adapter数据已经发生改变
2使用Adapter进行生成
signalListView=findViewById(RidsignalList);
mSignalListAdapter=new SignalListAdapter(MainActivitythis,DataList);
signalListViewsetAdapter(mSignalListAdapter);
3对于动态生成的ListView的控件进行更改
当想要对动态生成的控件里面的某一个属性进行更改的时候就麻烦了,这个时候首先应该进行数据的修改,当DataList中的值改变之后,调用之前写的setData方法告诉Adapter数据已经改变, 再调用Adapter的notifyDataSetChanged方法,调用后,Listview里的数据就会重新生成一次,还是在geiView中对于控件的属性进行更改, 数据的改变和notifyDataSetChanged方法写在handler里就行

这个是因为ListView中的Item的布局会被重复利用以提高效率。
解决这个问题应该是在你的Adapter的getView()方法中, 判断当前的Item是否有相关数据,如果没有,要将TextView的内容置空或隐藏。

@Override
public View getView(int position, final View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
convertView=LayoutInflaterfrom(MainActivitythis)inflate(resource, null);
ImageButton button=convertViewfindViewById(id);
buttonsetOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView textView=convertViewfindViewById(id);
textViewsetVisibility(ViewINVISIBLE);
}
});
return convertView;
}
改成这样 就可以了

在自定义的adapter中重写方法:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if(convertView == null){
convertView = inflaterinflate(Rlayoutlistivew_item, parent,false);
viewHolder = new ViewHolder();
viewHolderet = (EditText)convertViewfindViewById(Ridet);
viewHolderbtn = (Button)convertViewfindViewById(Ridbtn);
convertViewsetTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertViewgetTag();
}
final EditText showEt = viewHolderet;
viewHolderbtnsetOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ToastmakeText(getApplicationContext(), "响应点击事件", ToastLENGTH_SHORT)show();
showEtsetText("点击了第" + datasget(position) + "条数据");
}
});
return convertView;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13405448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存