动态设置view或布局的宽高
代码中动态设置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;
- @Override
- protected 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() {
- @Override
- public 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}" >
- <TextView
- android: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"
- >
- <TextView
- android: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或布局的宽高
有时我们需要在应用中动态改变图片或某一块布局的大小.这就不能用XML文件写成固定值,而需要在java代码中动态设置.效果如下: 网上有一些教程使用relativeView.setLayoutParam ...
- 为什么有时动态设置 View 的背景颜色 BackgroundColor 无效?
项目场景: 为什么有时动态设置 View 的背景颜色 BackgroundColor 无效,不少新手是不是遇到过这个问题呢 问题描述: 前几天朋友问了我一个问题,他直接在activity里动态设置 V ...
- 【Android】动态设置 View 的背景颜色 BackgroundColor 无效的问题
问题描述 我们都知道 setBackgroundColor() 方法用于动态设置 view 的背景颜色.今天在做需求的时候,需要根据情况动态更新自定义 view 的背景颜色,于是就想当然的这么写: m ...
- 动态设置 GridView Web 服务器控件列宽
ASP.NET 如何:动态设置 GridView Web 服务器控件列宽 默认情况下,会自动调整 GridView 控件中列的大小.列将呈现为不含宽度信息的 HTML 表单元格(td 元素):大多数浏 ...
- Android——动态设置view背景颜色setBackgroundColor
setBackgroundColor 用于动态设置view背景颜色 今天写代码的时候遇到个小问题 动态设置的时候用Color.GRAY,系统自己带着的颜色,是没有问题的 但是用自己定义的颜色,就不生效 ...
- 动态设置View的宽高、宽高比例(设置ViewPager的高度,宽高比例为2:1)
利用ViewPager显示banner的时候,一些人会直接写死ViewPager高度,比如在xml布局里面直接写成180dp. 这样的话,每个手机的宽度不同,viewpager里面内容的长宽比就不同, ...
- 动态设置view的宽高空指针问题
我遇到的问题的场景是这样的,recycleview加载图片,然后给recycleview添加一个头部视图,但是运用的过程中发现在xml中并不能很好地控制头部视图的高度,然后准备在代码中动态设置它的宽高 ...
- android 动态设置View的高度和宽度,ViewTreeObserver使用
private int mMonitorHeight = 0; private int mMonitorWidth = 0; private boolean bisSetScreen = false; ...
- [Android][设置最小(大)宽高]
#1.简介 TextView里定义的方法,据说是设置文本区域的宽高 android:maxWidth 关联方法: setMaxWidth(int) 属性说明: 设置文本区域的最大宽度 android: ...
最新文章
- Android应用打开外部文件
- linux 初始化工作进程 systemd简介
- 让女朋友能懂的网络技术篇之动态代理
- 数据库系统原理(第四章:SQL与关系数据库基本操作 )
- E - More is better (并查集)
- fastjson中@JSONType的使用-排除字段
- mysql 关闭严格_mysql关闭严格模式
- 2021大数据白皮书 附下载
- 杭州电子科技大学acm-2001
- 微信小程序----开发小技巧(二)
- numpy 折线图绘制(参考)
- 解决DedeCMS搜索结果每页显示10条无法修改方法
- C++开发斗地主(QT)第三篇之动画发牌与位置计算
- HTML-简单表格制作
- H263、H264和3GPP、MPEG4是什么关系
- sql Server2005 master损坏处理
- android 人脸检测 对焦,Android API教程:人脸检测(上)
- 字节码基础:JVM字节码初探
- 赛宁网安携车联网、工控安全强势亮相网络安全宣传周
- 郭天祥51单片机教程--- IIC总线