Android动态设置view的大小及其位置

来源:互联网 发布:比亚乔都市印象150数据 编辑:程序博客网 时间:2024/05/23 02:04

动态设置view的大小及其位置

需求就不说了,下面贴代码:

MainActivity

主要就是对view的操作,例如:

public class MainActivity extends Activity implements OnClickListener {    private Button btn;    private ImageView iv;    private LinearLayout ll_group;    public boolean isFullScreen = true;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        btn = (Button) findViewById(R.id.btn);        iv = (ImageView) findViewById(R.id.iv);        ll_group = (LinearLayout) findViewById(R.id.ll_group);        btn.setOnClickListener(this);    }    @Override    public void onClick(View v) {        if (isFullScreen) { // 全屏转半屏            setViewSize(iv);            isFullScreen = false;        } else {            isFullScreen = true;            setViewFullScreen(iv);        }    }    /**     * 设置view的大小     *      * @param iv2     */    private void setViewFullScreen(ImageView view) {        MarginLayoutParams margin = new MarginLayoutParams(view.getLayoutParams());        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin);        layoutParams.width = 1000 ;        layoutParams.height = 800 ;        view.setLayoutParams(layoutParams);    }    /**     * 自定义设置位置及其大小     *      * @param iv2     */    private void setViewSize(ImageView view) {        MarginLayoutParams margin = new MarginLayoutParams(view.getLayoutParams());        int dpTop = dp2px( 10);        int dpRight = dp2px( 10);        int dpLeft=dp2px( 10);        margin.setMargins(dpLeft, dpTop, dpRight, 0);        DisplayMetrics metric = new DisplayMetrics();        getWindowManager().getDefaultDisplay().getMetrics(metric);        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin);        layoutParams.width = 500;        layoutParams.height= 400;        view.setLayoutParams(layoutParams);    }    public  int dp2px(float dpValue){        final float scale=MainActivity.this.getResources().getDisplayMetrics().density;        return (int)(dpValue*scale+0.5f);    }}

xml

<LinearLayout 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"    android:orientation="vertical" >    <LinearLayout        android:id="@+id/ll_group"        android:layout_height="400dp"        android:layout_width="match_parent"        android:orientation="vertical" >        <ImageView            android:id="@+id/iv"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:src="@drawable/aa" />    </LinearLayout>    <Button        android:id="@+id/btn"        android:layout_width="match_parent"        android:layout_height="50dp"        android:gravity="center"        android:text="button" /></LinearLayout>

注意事项

动态变化的view设置宽高属性时,指向的引用类型,应该是该view的父控件。否则将会报:

   java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
    MarginLayoutParams margin = new MarginLayoutParams(view.getLayoutParams());        /**        *在xml中,view的父控件是LinearLayout这里要LinearLayout.LayoutParams.          */        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin);        layoutParams.width = 1000 ;        layoutParams.height = 800 ;        view.setLayoutParams(layoutParams);
1 0
原创粉丝点击