代码中动态设置view或布局的宽高

 
  • 标签:
  • 图片/
  • 动态改变/
  • 宽高

有时我们需要在应用中动态改变图片或某一块布局的大小。这就不能用XML文件写成固定值,而需要在java代码中动态设置。效果如下:

网上有一些教程使用relativeView.setLayoutParams(new RelativeLayout.LayoutParams(100,200));的方法,可是发现这样设置很容易抛错;

因此有人指出不能直接新建一个LayoutParams的同时设置宽高值,需要先实例化一个对象,再进行具体参数的设置,然后再设置,如下:

RelativeLayout.LayoutParams Params =  (RelativeLayout.LayoutParams)mView.getLayoutParams();
        Params.height = 100;
        mView.setLayoutParams(linearParams);

然而这时候你一定要注意强制类型转换时的LayoutParams类型,因为android中存在3种LayoutParams,即RelativeLayout.LayoutParams、LinearLayout.LayoutParams、ViewGroup.LayoutParams,那么我们改用哪一个呢?

--要看你要操作的view在布局文件中的父控件是什么类型的,若父控件是RelativeLayout则需要强制转换为RelativeLayout.LayoutParams,其它类型依次类推。

Aactivity代码:

[java] view plain copy
  1. package com.example.setwidthheight;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.res.Resources;
  5. import android.os.Bundle;
  6. import android.util.TypedValue;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import android.widget.ImageView;
  12. import android.widget.RelativeLayout;
  13. import android.widget.Toast;
  14. public class MainActivity extends Activity {
  15. private EditText editWidth;
  16. private EditText editHeight;
  17. private ImageView imageView;
  18. private Button button;
  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.activity_main);
  23. editWidth = (EditText) findViewById(R.id.edit_width);
  24. editHeight = (EditText) findViewById(R.id.edit_height);
  25. imageView = (ImageView) findViewById(R.id.img);
  26. button    = (Button) findViewById(R.id.btn);
  27. button.setOnClickListener(changeClickListener);
  28. }
  29. private OnClickListener changeClickListener = new OnClickListener() {
  30. @Override
  31. public void onClick(View v) {
  32. if (editHeight.getText() != null && editWidth.getText() != null
  33. && !editHeight.getText().toString().equals("")
  34. && !editWidth.getText().toString().equals("")) {
  35. int width = Integer.parseInt(editWidth.getText().toString());
  36. int height = Integer.parseInt(editHeight.getText().toString());
  37. RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imageView.getLayoutParams();
  38. params.width = dip2px(MainActivity.this, width);
  39. params.height = dip2px(MainActivity.this, height);
  40. // params.setMargins(dip2px(MainActivity.this, 1), 0, 0, 0); // 可以实现设置位置信息,如居左距离,其它类推
  41. // params.leftMargin = dip2px(MainActivity.this, 1);
  42. imageView.setLayoutParams(params);
  43. } else {
  44. Toast.makeText(MainActivity.this, "请输入宽高!", Toast.LENGTH_LONG).show();
  45. }
  46. }
  47. };
  48. /**
  49. * dp转为px
  50. * @param context  上下文
  51. * @param dipValue dp值
  52. * @return
  53. */
  54. private int dip2px(Context context,float dipValue)
  55. {
  56. Resources r = context.getResources();
  57. return (int) TypedValue.applyDimension(
  58. TypedValue.COMPLEX_UNIT_DIP, dipValue, r.getDisplayMetrics());
  59. }
  60. }

XML布局代码:

[html] view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="${relativePackage}.${activityClass}" >
  6. <TextView
  7. android:id="@+id/tv"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_centerHorizontal="true"
  11. android:layout_marginBottom="10dp"
  12. android:text="输入宽高后,点击按钮改变大小" />
  13. <ImageView
  14. android:id="@+id/img"
  15. android:layout_width="200dp"
  16. android:layout_height="300dp"
  17. android:layout_below="@+id/tv"
  18. android:contentDescription="@null"
  19. android:layout_centerHorizontal="true"
  20. android:src="@drawable/image"
  21. />
  22. <LinearLayout
  23. android:layout_width="fill_parent"
  24. android:layout_height="wrap_content"
  25. android:layout_above="@+id/btn"
  26. android:layout_marginBottom="10dp"
  27. android:padding="5dp"
  28. android:orientation="horizontal"
  29. >
  30. <TextView
  31. android:layout_width="fill_parent"
  32. android:layout_height="wrap_content"
  33. android:layout_weight="1.2"
  34. android:text="设置 (dp)  " />
  35. <EditText
  36. android:id="@+id/edit_width"
  37. android:layout_width="fill_parent"
  38. android:layout_height="wrap_content"
  39. android:layout_weight="1"
  40. android:hint="宽"
  41. />
  42. <EditText
  43. android:id="@+id/edit_height"
  44. android:layout_width="fill_parent"
  45. android:layout_height="wrap_content"
  46. android:layout_weight="1"
  47. android:hint="高"
  48. />
  49. </LinearLayout>
  50. <Button
  51. android:id="@+id/btn"
  52. android:layout_width="wrap_content"
  53. android:layout_height="wrap_content"
  54. android:layout_marginBottom="10dp"
  55. android:layout_centerHorizontal="true"
  56. android:layout_alignParentBottom="true"
  57. android:text="change"
  58. />
  59. </RelativeLayout>

源码下载地址:http://download.csdn.net/detail/duguju/9302619

动态设置view或布局的宽高相关推荐

  1. 代码中动态设置view或布局的宽高

    有时我们需要在应用中动态改变图片或某一块布局的大小.这就不能用XML文件写成固定值,而需要在java代码中动态设置.效果如下: 网上有一些教程使用relativeView.setLayoutParam ...

  2. 为什么有时动态设置 View 的背景颜色 BackgroundColor 无效?

    项目场景: 为什么有时动态设置 View 的背景颜色 BackgroundColor 无效,不少新手是不是遇到过这个问题呢 问题描述: 前几天朋友问了我一个问题,他直接在activity里动态设置 V ...

  3. 【Android】动态设置 View 的背景颜色 BackgroundColor 无效的问题

    问题描述 我们都知道 setBackgroundColor() 方法用于动态设置 view 的背景颜色.今天在做需求的时候,需要根据情况动态更新自定义 view 的背景颜色,于是就想当然的这么写: m ...

  4. 动态设置 GridView Web 服务器控件列宽

    ASP.NET 如何:动态设置 GridView Web 服务器控件列宽 默认情况下,会自动调整 GridView 控件中列的大小.列将呈现为不含宽度信息的 HTML 表单元格(td 元素):大多数浏 ...

  5. Android——动态设置view背景颜色setBackgroundColor

    setBackgroundColor 用于动态设置view背景颜色 今天写代码的时候遇到个小问题 动态设置的时候用Color.GRAY,系统自己带着的颜色,是没有问题的 但是用自己定义的颜色,就不生效 ...

  6. 动态设置View的宽高、宽高比例(设置ViewPager的高度,宽高比例为2:1)

    利用ViewPager显示banner的时候,一些人会直接写死ViewPager高度,比如在xml布局里面直接写成180dp. 这样的话,每个手机的宽度不同,viewpager里面内容的长宽比就不同, ...

  7. 动态设置view的宽高空指针问题

    我遇到的问题的场景是这样的,recycleview加载图片,然后给recycleview添加一个头部视图,但是运用的过程中发现在xml中并不能很好地控制头部视图的高度,然后准备在代码中动态设置它的宽高 ...

  8. android 动态设置View的高度和宽度,ViewTreeObserver使用

    private int mMonitorHeight = 0; private int mMonitorWidth = 0; private boolean bisSetScreen = false; ...

  9. [Android][设置最小(大)宽高]

    #1.简介 TextView里定义的方法,据说是设置文本区域的宽高 android:maxWidth 关联方法: setMaxWidth(int) 属性说明: 设置文本区域的最大宽度 android: ...

最新文章

  1. Android应用打开外部文件
  2. linux 初始化工作进程 systemd简介
  3. 让女朋友能懂的网络技术篇之动态代理
  4. 数据库系统原理(第四章:SQL与关系数据库基本操作 )
  5. E - More is better (并查集)
  6. fastjson中@JSONType的使用-排除字段
  7. mysql 关闭严格_mysql关闭严格模式
  8. 2021大数据白皮书 附下载
  9. 杭州电子科技大学acm-2001
  10. 微信小程序----开发小技巧(二)
  11. numpy 折线图绘制(参考)
  12. 解决DedeCMS搜索结果每页显示10条无法修改方法
  13. C++开发斗地主(QT)第三篇之动画发牌与位置计算
  14. HTML-简单表格制作
  15. H263、H264和3GPP、MPEG4是什么关系
  16. sql Server2005 master损坏处理
  17. android 人脸检测 对焦,Android API教程:人脸检测(上)
  18. 字节码基础:JVM字节码初探
  19. 赛宁网安携车联网、工控安全强势亮相网络安全宣传周
  20. 郭天祥51单片机教程--- IIC总线

热门文章

  1. windows制作proxmox pve U盘镜像
  2. 超级好用的安卓手机助手
  3. mac homebrew安装使用
  4. 2019年互联网女皇趋势报告:小程序创新创业商业模式引领全球
  5. F28335 ePWM计数模块(CC)与 动作模块(AC)及其寄存器配置 ————TMS320F28335学习笔记(六)
  6. 基础乐理之音程的度数
  7. 央视解说员手机彩铃版
  8. 文字图片视差效果 html+css+js
  9. 基于Qualcomm骁龙处理器的脸部识别开发
  10. 三峡大学计算机学院毕业答辩问题,毕业答辩会问点什么问题?