如何在android中以编程方式设置ImageView的高度宽度?

Posted

技术标签:

【中文标题】如何在android中以编程方式设置ImageView的高度宽度?【英文标题】:How to set Height Width of ImageView programmatically in android? 【发布时间】:2014-08-22 18:21:48 【问题描述】:

如何在幻灯片菜单的 getview() 中以线性布局方式以编程方式增加或减小 imageview、textview 或任何其他内容的大小。

我通过 androidhive 教程获得了幻灯片菜单

正是在幻灯片菜单中,我需要添加用户个人资料图片和他的姓名、位置,就像在 facebook、google 和其他社交网站中一样,为此尝试了很多 (getlayoutparams(),setheight()...) 即使有很多方法,但我不能在侧面菜单列表中设置它。

什么方法,但个人资料图片和名称没有变化。

这是我的代码:

mport android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class NavDrawerListAdapter extends BaseAdapter 
ImageView imgIcon;
LinearLayout linearposition;
private Context context;
private ArrayList<NavDrawerItem> navDrawerItems;

public NavDrawerListAdapter(Context context,
ArrayList<NavDrawerItem> navDrawerItems) 
this.context = context;
this.navDrawerItems = navDrawerItems;


@Override
public int getCount() 
return navDrawerItems.size();


@Override
public Object getItem(int position) 
return navDrawerItems.get(position);


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


@Override
public View getView(int position, View convertView, ViewGroup parent) 
if (convertView == null) 
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.drawer_list_item, null);

linearposition = (LinearLayout) convertView
.findViewById(R.id.linearposition);

NavDrawerItem label = navDrawerItems.get(position);
if (position == 0) 
newsection(linearposition, label);

imgIcon = (ImageView) convertView.findViewById(R.id.icon);
TextView txtTitle = (TextView) convertView.findViewById(R.id.title);
TextView txtCount = (TextView) convertView.findViewById(R.id.counter);

imgIcon.setImageResource(navDrawerItems.get(position).getIcon());
txtTitle.setText(navDrawerItems.get(position).getTitle());

// displaying count
// check whether it set visible or not
if (navDrawerItems.get(position).getCounterVisibility()) 
txtCount.setText(navDrawerItems.get(position).getCount());
 else 
// hide the counter view
txtCount.setVisibility(View.GONE);


return convertView;


@SuppressLint("NewApi"
private void newsection(LinearLayout linearposition, NavDrawerItem label) 
// int height = 50;
// int width =50;
ImageView image = new ImageView(context);
// image.setImageResource(R.drawable.profile_circle);
// image.setPaddingRelative (5, 5, 5, 5);
// image.setMaxHeight(40);
// image.setMaxWidth(40);
// image.getLayoutParams().height = 20;
// image.requestLayout();
android.view.ViewGroup.LayoutParams layoutParams = image
.getLayoutParams();
layoutParams.width = 20;
layoutParams.height = 20;
image.setLayoutParams(layoutParams);
linearposition.addView(image);

// android.view.ViewGroup.LayoutParams layoutParams =
// image.getLayoutParams();
// LinearLayout.LayoutParams layoutParams = new
// LinearLayout.LayoutParams(0, 0);
// image.setLayoutParams(layoutParams);
// layoutParams.width = 30;
// layoutParams.height = 30;
// image.setLayoutParams(new LayoutParams(width,height));
// LinearLayout.LayoutParams layoutParams = new
// LinearLayout.LayoutParams(100, 100);
// iv.setLayoutParams(layoutParams);
// image.setLayoutParams(layoutParams);
// linearposition.addView(image);



布局:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@drawable/list_selector" >

    <LinearLayout
        android:id="@+id/linearposition"
        android:layout_
        android:layout_
        androidrientation="vertical" />

    <ImageView
        android:id="@+id/icon"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="12dp"
        android:layout_marginRight="12dp"
        android:contentDescription="@string/desc_list_item_icon"
        androidrc="@drawable/home_icon" />

    <TextView
        android:id="@+id/title"
        android:layout_
        android:layout_
        android:layout_toRightOf="@id/icon"
        android:gravity="center_vertical"
        android:minHeight="?android:attr/listPreferredItemHeightSmall"
        androidaddingRight="40dp"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:textColor="@color/list_item_title" />

    <TextView
        android:id="@+id/counter"
        android:layout_
        android:layout_
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="8dp"
        android:background="@drawable/counter_bg"
        android:textColor="@color/counter_text_color" />

</RelativeLayout>

如果有人对此有任何想法,请朋友们指导我。

【问题讨论】:

我遇到了同样的问题,但这个解决方案帮助了我http://***.com/a/5257851/6780216 【参考方案1】:

这种简单的方式来完成你的任务:

setContentView(R.id.main);    
ImageView iv = (ImageView) findViewById(R.id.left);
int width = 60;
int height = 60;
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);

如果你想在高度和宽度上给出屏幕尺寸,那么使用下面的代码:

setContentView(R.id.main);    
Display display = getWindowManager().getDefaultDisplay();
ImageView iv = (ImageView) findViewById(R.id.left);
int width = display.getWidth(); // ((display.getWidth()*20)/100)
int height = display.getHeight();// ((display.getHeight()*30)/100)
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);

希望对你充分利用。

看我的回答:-

Set ImageView width and height programmatically?

【讨论】:

我已经尝试过您的答案,但默认大小没有变化 image_view.getLayoutParams().height = 20;如果将其设置为 (0)n 也没有图像的大小保持不变我有点困惑所有这些都可以在幻灯片菜单布局中工作 @user3737339 在哪一行 特别是在这一行 image_view.getLayoutParams().height = 20; 我没有在 XML 中创建图像视图,将其通过线性布局中的代码传递给 XML,请参阅我更新的代码。 @user3737339 你会试试我的答案吗?【参考方案2】:

也许您可以尝试将父容器(在您的情况下为 LinearLayout)的 minHeight 设置为您想要的图像高度并将高度设置为 WRAP_CONTENT?

【讨论】:

你能给我任何xml样本来试试吗【参考方案3】:

以编程方式设置宽度和高度,并确保您没有为 imageview 的父布局提供固定宽度和高度

android.view.ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
layoutParams.width = 80;
layoutParams.height = 80;
imageView.setLayoutParams(layoutParams);

【讨论】:

schemas.android.com/apk/res/android" android:layout_ android:layout_ android:background="@drawable/list_selector"> 这是我的布局,但没有变化。 哪个布局是你的 imageview 的父级? RelativeLayout 是父级,因为我尝试设置线性布局 并通过代码方式通过传递 id 引用插入图像视图 我更新了我的代码和布局,请查看并帮助我修复它。

以上是关于如何在android中以编程方式设置ImageView的高度宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中以编程方式设置背景可绘制对象

如何在android中以编程方式设置listview高度

如何在 Holo 主题 Api 11-17 Android 中以编程方式将 EditText 背景设置为默认值

通过 Phonegap 在 Android 中以编程方式设置静音模式

如何在 Android 中以编程方式增加和减少音量

在android中以编程方式获取屏幕密度?