有时我们需要在应用中动态改变图片或某一块布局的大小。这就不能用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代码:

package com.example.setwidthheight;import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;public class MainActivity extends Activity {private EditText editWidth;private EditText editHeight;private ImageView imageView;private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editWidth = (EditText) findViewById(R.id.edit_width);editHeight = (EditText) findViewById(R.id.edit_height);imageView = (ImageView) findViewById(R.id.img);button    = (Button) findViewById(R.id.btn);button.setOnClickListener(changeClickListener);}private OnClickListener changeClickListener = new OnClickListener() {@Overridepublic void onClick(View v) {if (editHeight.getText() != null && editWidth.getText() != null&& !editHeight.getText().toString().equals("")&& !editWidth.getText().toString().equals("")) {int width = Integer.parseInt(editWidth.getText().toString());int height = Integer.parseInt(editHeight.getText().toString());RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imageView.getLayoutParams();params.width = dip2px(MainActivity.this, width);params.height = dip2px(MainActivity.this, height);// params.setMargins(dip2px(MainActivity.this, 1), 0, 0, 0); // 可以实现设置位置信息,如居左距离,其它类推// params.leftMargin = dip2px(MainActivity.this, 1);imageView.setLayoutParams(params);} else {Toast.makeText(MainActivity.this, "请输入宽高!", Toast.LENGTH_LONG).show();}}};/*** dp转为px* @param context  上下文* @param dipValue dp值* @return*/private int dip2px(Context context,float dipValue) {Resources r = context.getResources();return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, r.getDisplayMetrics());}}

XML布局代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="${relativePackage}.${activityClass}" ><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_marginBottom="10dp"android:text="输入宽高后,点击按钮改变大小" /><ImageView android:id="@+id/img"android:layout_width="200dp"android:layout_height="300dp"android:layout_below="@+id/tv"android:contentDescription="@null"android:layout_centerHorizontal="true"android:src="@drawable/image"/><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_above="@+id/btn"android:layout_marginBottom="10dp"android:padding="5dp"android:orientation="horizontal"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1.2"android:text="设置 (dp)  " /><EditText android:id="@+id/edit_width"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:hint="宽"/><EditText android:id="@+id/edit_height"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:hint="高"/></LinearLayout><Button android:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:layout_centerHorizontal="true"android:layout_alignParentBottom="true"android:text="change"/></RelativeLayout>

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

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

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

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

  2. android 动态设边距,在代码中动态设置页边距 - android

    我有一个只包含ScrollView和TableLayout的活动.在我的代码我加入tablerows,一切工作正常,除了利润 - 它不工作(没有任何反应),下面是代码:在代码中动态设置页边距 - an ...

  3. 【Android】代码中动态设置 drawable 背景

    如图这样的效果,我们平时直接可以在 xml 写死. 写法很简单. <?xml version="1.0" encoding="utf-8"?>< ...

  4. Android 代码中动态设置字体大小-TextView.SetTextSize()

    关键代码 - setTextSize(TypedValue.COMPLEX_UNIT_PX,15); //15像素 - setTextSize(TypedValue.COMPLEX_UNIT_SP,1 ...

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

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

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

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

  7. android viewpager动态加载页面,Android viewpager中动态添加view并实现伪无限循环的方法...

    本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里 ...

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

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

  9. Quartz在Spring中动态设置cronExpression

    什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...

最新文章

  1. 消息延迟队列处理拼团时间到期
  2. 如何改变anaconda 的 gcc 版本?
  3. N-LTP:基于预训练模型的中文自然语言处理平台
  4. 「杂谈」如何系统性地学习生成对抗网络GAN
  5. torch中的topk()函数
  6. matlab 7.9.0 帮助翻译--zeros函数
  7. 利用Cloudflare为基于GitHub Pages的Hexo博客添加HTTPS支持
  8. php oauth2 和 jwt,jwt-auth: thinkphp 的 jwt (JSON Web Token)身份验证扩展包,支持Swoole...
  9. socket()编程简介
  10. 自从上了 Prometheus 监控,睡觉真香!
  11. 数据传输类型与通信方式
  12. 警惕!全球酒店门锁很容易受到黑客攻击
  13. java合并2个txt文本,Java实现多个文档合并输出到一个文档
  14. 如何给扑克洗牌才能更公平?
  15. vue将文件/图片/视频批量打包成压缩包,并进行下载
  16. Web前端(15)_input表单
  17. idea风格ui java_IDEA界面太丑??尝试一下这几个风格
  18. Python修改路由器WIFI账号
  19. 写有用的东西,不要灌水
  20. Handlebars的使用方法及技巧

热门文章

  1. 调查问卷录入spss
  2. win7开启uasp协议_全方位保护 Century USB3.0硬盘保护壳评测
  3. 计算机二级考试20套word,全国计算机等级考试 二级MS Office高级应用(Word部分:第11-20套)...
  4. 第15章 Linux的Makefile与Cmake编程
  5. 【操作系统】计算机系统概述
  6. 如何永久性去除word修订标记及批注帮助
  7. Mac OS X系统 HomeBrew的安装和简单使用
  8. 信息学奥赛一本通:1163:阿克曼(Ackmann)函数
  9. 新一配:对等网络的软件类型和技术标准【转载】
  10. 有哪些好用的win10电脑桌面时钟--Fliqlo+Digital Clock