zoukankan      html  css  js  c++  java
  • Android动态布局,并动态为TextView控件设置drawableLeft、drawableRight等属性加入图标


    注:(图中每个条目和图标都是由代码动态生成)


    代码动态布局,并须要为每个条目设置图标,此时用到了 android:drawableLeft="@drawable/icon" 


    父xml文件:

    1. <?

      xml version="1.0" encoding="utf-8"?>  

    2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:background="@color/background" >  
    6.     <!-- 子布局由代码动态生成 -->  
    7.     <LinearLayout  
    8.         android:id="@+id/layout_CONTENT"  
    9.         android:layout_width="match_parent"  
    10.         android:layout_height="match_parent"  
    11.         android:padding="@dimen/content_padding" >  
    12.   
    13.         <LinearLayout  
    14.             android:id="@+id/activity_service_select"  
    15.             android:layout_width="match_parent"  
    16.             android:layout_height="wrap_content"  
    17.             android:layout_margin="@dimen/table_margin"  
    18.             android:background="@color/table_background"  
    19.             android:orientation="vertical"  
    20.             android:padding="@dimen/table_padding" >  
    21.         </LinearLayout>  
    22.     </LinearLayout>  
    23.   
    24. </ScrollView>  

    子xml文件:

    1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     android:layout_width="match_parent"  
    3.     android:layout_height="@dimen/row_height"  
    4.     android:layout_marginBottom="@dimen/row_margin"  
    5.     android:background="@drawable/row_selector"  
    6.     android:paddingLeft="@dimen/row_padding_left"  
    7.     android:paddingRight="@dimen/row_padding_right" >  
    8.   
    9.     <TextView  
    10.         android:id="@+id/tv_select_item"  
    11.         style="@style/text_18"  
    12.         android:layout_width="match_parent"  
    13.         android:layout_height="@dimen/row_height"  
    14.         android:layout_marginBottom="@dimen/row_margin"  
    15.         android:background="@drawable/row_selector"  
    16.         android:gravity="center_vertical"  
    17.         android:textColor="@drawable/row_text_selector" />  
    18.   
    19.     <ImageView  
    20.         android:id="@+id/iv_icon"  
    21.         android:layout_width="wrap_content"  
    22.         android:layout_height="match_parent"  
    23.         android:layout_alignParentRight="true"  
    24.         android:duplicateParentState="true"  
    25.         android:gravity="center_vertical"  
    26.         android:src="@drawable/go" />  
    27.   
    28. </RelativeLayout>  

    代码中引用:

    1. private ViewGroup mLayout;  
    2.     private int img[] = {R.drawable.zikao1,R.drawable.zikao2,R.drawable.zikao3,R.drawable.zikao4};  
    3.     /* (non-Javadoc) 
    4.      * @see app.ui.TitleActivity#onCreate(android.os.Bundle) 
    5.      */  
    6.     @Override  
    7.     protected void onCreate(Bundle savedInstanceState) {  
    8.         super.onCreate(savedInstanceState);  
    9.         setUpViews();  
    10.     }  
    11.   
    12.     private void setUpViews()  
    13.     {  
    14.         setContentView(R.layout.activity_service_select);  
    15.         setTitle(R.string.text_select);  
    16.         showBackwardView(R.string.button_backward, true);  
    17.         mLayout = (ViewGroup)findViewById(R.id.activity_service_select);  
    18.         final String [] mSelfSelect = getResources().getStringArray(R.array.text_self_select);  
    19.         // 须要布局的行数  
    20.         final int rowCount = mSelfSelect.length;  
    21.         for (int i = 0; i < rowCount; i++) {  
    22.             final LinearLayout linearLayout = new LinearLayout(this);  
    23.             View.inflate(this, R.layout.service_examvaluable_item, linearLayout);  
    24.             final View view = linearLayout.getChildAt(0);  
    25.             view.setTag(i+1);  
    26.             view.setOnClickListener(this);  
    27.   
    28.             Drawable drawable= getResources().getDrawable(img[i]);  
    29.             drawable.setBounds(00, drawable.getMinimumWidth(), drawable.getMinimumHeight());  
    30.   
    31.             final TextView mTextView = (TextView) linearLayout.findViewById(R.id.tv_select_item);  
    32.             mTextView.setCompoundDrawables(drawable,null,null,null);//设置TextView的drawableleft  
    33.             mTextView.setCompoundDrawablePadding(10);//设置图片和text之间的间距  
    34.             mTextView.setText(mSelfSelect[i]);  
    35.             // 加入到屏幕布局  
    36.             LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);  
    37.             mLayout.addView(linearLayout, layoutParams);  
    38.         }  
    39.     }  



    在程序中直接取出子xml中TextView中的id,并动态设置改变了 DrawableLeft。


    解决方式:

    [java] view plaincopy
    1. public void  setCompoundDrawables  (Drawable left, Drawable top, Drawable right, Drawable bottom);  


    类似调用方法例如以下:

    1.在XML中使用

    [java] view plaincopy
    1. android:drawableLeft="@drawable/icon"  


    2.代码中动态变化

    [java] view plaincopy
    1. Drawable drawable= getResources().getDrawable(R.drawable.drawable);  
    2. drawable.setBounds(00, drawable.getMinimumWidth(), drawable.getMinimumHeight());  
    3. myTextview.setCompoundDrawables(drawable,null,null,null);  

    參考还有一个函数:

    [java] view plaincopy
    1. public void setCompoundDrawablesWithIntrinsicBounds (Drawable left,  
    2. Drawable top, Drawable right, Drawable bottom)  
  • 相关阅读:
    字符串中部分字符替换
    斐波那契数列
    单列模式--代码
    selenium基础知识
    关于页面元素不能定位,通过Js进行处理
    Linux性能监控工具命令--top
    java实现selenium jquery滑动解锁
    PHP学习(三)——连接MySQL数据库理论
    PHP学习(二)
    PHP学习(一)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5173207.html
Copyright © 2011-2022 走看看