代码中动态设置view或布局的宽高
来源:互联网 发布:web编程语言 编辑:程序博客网 时间:2024/05/17 03:35
有时我们需要在应用中动态改变图片或某一块布局的大小。这就不能用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}" > <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>
1 0
- 代码中动态设置view或布局的宽高
- 动态设置view或布局的宽高
- 在Activity中动态设置控件或布局的宽高适应不同分辨率
- Java代码中动态设置布局宽高
- 关于安卓获取组件或布局的实际宽高和动态设置组件或布局的宽高
- 重设布局中控件或布局的宽高
- android代码中动态设置布局中控件的属性
- android代码中动态设置布局中控件的属性
- android 用java代码设置布局、视图View的宽度/高度或自适应
- 代码中动态设置相对布局里控件的位置
- Android动态设置VIew宽高
- android 动态设置View 高和宽
- Android 在程序中动态添加 View 布局或控件
- 代码设置view的宽高注意细节
- 动态重新设置布局宽高
- 在storyboard或xib中,设置了View的约束,代码更改View的坐标大小
- 在代码中设置view的宽
- java代码设置布局的宽和高
- Leetcode171: Implement Trie (Prefix Tree)
- recover和restore的区别
- 【转载】浅谈MySql的存储引擎(表类型)
- CentOS7下Firewall常用命令
- Volley以及用Volley实现照片墙
- 代码中动态设置view或布局的宽高
- 进入相册选择图片的方法
- 解决搭载OpenStack时候出现can't connect to mysql server on 'controller'的问题
- shell基础 第一部分 (特殊符号,变量)
- shell命令
- 用 canvas 做个好玩的网站背景
- java.lang.Exception: org.apache.tapestry.BindingException
- js实现的一个简单的百分比进度条
- 华为机试——计算数的二进制中第一个1之后0的个数