代码中动态设置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代码:
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或布局的宽高相关推荐
- 动态设置view或布局的宽高
代码中动态设置view或布局的宽高 标签: 图片/ 动态改变/ 宽高 有时我们需要在应用中动态改变图片或某一块布局的大小.这就不能用XML文件写成固定值,而需要在java代码中动态设置.效果如下: ...
- android 动态设边距,在代码中动态设置页边距 - android
我有一个只包含ScrollView和TableLayout的活动.在我的代码我加入tablerows,一切工作正常,除了利润 - 它不工作(没有任何反应),下面是代码:在代码中动态设置页边距 - an ...
- 【Android】代码中动态设置 drawable 背景
如图这样的效果,我们平时直接可以在 xml 写死. 写法很简单. <?xml version="1.0" encoding="utf-8"?>< ...
- Android 代码中动态设置字体大小-TextView.SetTextSize()
关键代码 - setTextSize(TypedValue.COMPLEX_UNIT_PX,15); //15像素 - setTextSize(TypedValue.COMPLEX_UNIT_SP,1 ...
- 动态设置View的宽高、宽高比例(设置ViewPager的高度,宽高比例为2:1)
利用ViewPager显示banner的时候,一些人会直接写死ViewPager高度,比如在xml布局里面直接写成180dp. 这样的话,每个手机的宽度不同,viewpager里面内容的长宽比就不同, ...
- 动态设置view的宽高空指针问题
我遇到的问题的场景是这样的,recycleview加载图片,然后给recycleview添加一个头部视图,但是运用的过程中发现在xml中并不能很好地控制头部视图的高度,然后准备在代码中动态设置它的宽高 ...
- android viewpager动态加载页面,Android viewpager中动态添加view并实现伪无限循环的方法...
本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里 ...
- Android——动态设置view背景颜色setBackgroundColor
setBackgroundColor 用于动态设置view背景颜色 今天写代码的时候遇到个小问题 动态设置的时候用Color.GRAY,系统自己带着的颜色,是没有问题的 但是用自己定义的颜色,就不生效 ...
- Quartz在Spring中动态设置cronExpression
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...
最新文章
- 消息延迟队列处理拼团时间到期
- 如何改变anaconda 的 gcc 版本?
- N-LTP:基于预训练模型的中文自然语言处理平台
- 「杂谈」如何系统性地学习生成对抗网络GAN
- torch中的topk()函数
- matlab 7.9.0 帮助翻译--zeros函数
- 利用Cloudflare为基于GitHub Pages的Hexo博客添加HTTPS支持
- php oauth2 和 jwt,jwt-auth: thinkphp 的 jwt (JSON Web Token)身份验证扩展包,支持Swoole...
- socket()编程简介
- 自从上了 Prometheus 监控,睡觉真香!
- 数据传输类型与通信方式
- 警惕!全球酒店门锁很容易受到黑客攻击
- java合并2个txt文本,Java实现多个文档合并输出到一个文档
- 如何给扑克洗牌才能更公平?
- vue将文件/图片/视频批量打包成压缩包,并进行下载
- Web前端(15)_input表单
- idea风格ui java_IDEA界面太丑??尝试一下这几个风格
- Python修改路由器WIFI账号
- 写有用的东西,不要灌水
- Handlebars的使用方法及技巧
热门文章
- 调查问卷录入spss
- win7开启uasp协议_全方位保护 Century USB3.0硬盘保护壳评测
- 计算机二级考试20套word,全国计算机等级考试 二级MS Office高级应用(Word部分:第11-20套)...
- 第15章 Linux的Makefile与Cmake编程
- 【操作系统】计算机系统概述
- 如何永久性去除word修订标记及批注帮助
- Mac OS X系统 HomeBrew的安装和简单使用
- 信息学奥赛一本通:1163:阿克曼(Ackmann)函数
- 新一配:对等网络的软件类型和技术标准【转载】
- 有哪些好用的win10电脑桌面时钟--Fliqlo+Digital Clock