Android如何自定义LinearLayout

 我来答
剪辑客
推荐于2016-06-18 · 更多经典影视精彩镜头尽在剪辑客……
剪辑客
采纳数:825 获赞数:1656

向TA提问 私信TA
展开全部

LinearLayout自定义方法有多种:

1、自定义xml布局,然后加载布局,自定义一个View继承LinearLayout

2、在自定义控件中声明它的所有子元素,然后在Layout文件中像使用LinearLayout一样去进行布局。


第二种比较烦 ,它需要在Layout文件中定义好子元素之后,要在代码 onFinishInflate() 进行匹配子元素。


我就说说加载布局文件的方法吧。

首先:定义好layout文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="

    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:paddingBottom="5dip"
        android:paddingLeft="40dip"
        android:paddingTop="5dip"
        android:src="@drawable/right_icon" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="8dip"
        android:text="主题"
        android:textColor="#000000" />
   <LinearLayout 
        android:layout_width="100dp"
     android:layout_height="fill_parent"
     android:orientation="horizontal" >
     <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:paddingBottom="5dip"
        android:paddingLeft="12dip"
        android:paddingTop="5dip"
        android:src="@drawable/home_icon" />
     <ImageView
        android:id="@+id/imageView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:paddingBottom="5dip"
        android:paddingLeft="12dip"
        android:paddingTop="5dip"
        android:src="@drawable/add_icon" />
</LinearLayout>

</LinearLayout>
public class MyLinearLayout extends LinearLayout {

private ImageView imageView,iv_home,iv_add;
private TextView  textView;

public MyLinearLayout (Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyLinearLayout (Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.actionbar, this);
imageView=(ImageView) findViewById(R.id.imageView1);
iv_home=(ImageView) findViewById(R.id.imageView2);
iv_add=(ImageView) findViewById(R.id.imageView3);
textView=(TextView)findViewById(R.id.textView1);


}

/** 
     * 设置图片资源 
     */  
    public void setImageResource(int resId) {  
        imageView.setImageResource(resId);  
    }  
  
    /** 
     * 设置显示的文字 
     */  
    public void setTextViewText(String text) {  
        textView.setText(text);  
    }  

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="

    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <cn.com.demo.view.MyLinearLayout
        android:id="@+id/ll_actionbar"
        android:layout_height="fill_parent<span style="font-family: Tahoma, 'Microsoft Yahei', Simsun;">"  </span>
        android:layout_width="wrap_content"
        android:background="@drawable/bg"  
        />
</LinearLayout>

接下来自定义一个MyLinearLayout继承LinearLayout,并且加载刚刚写好的layout文件。(比如http://www.tiecou.com)

public class MyLinearLayout extends LinearLayout {
private ImageView imageView,iv_home,iv_add;
private TextView  textView;
public MyLinearLayout (Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyLinearLayout (Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.actionbar, this);
imageView=(ImageView) findViewById(R.id.imageView1);
iv_home=(ImageView) findViewById(R.id.imageView2);
iv_add=(ImageView) findViewById(R.id.imageView3);
textView=(TextView)findViewById(R.id.textView1);
}
/** 
     * 设置图片资源 
     */  
    public void setImageResource(int resId) {  
        imageView.setImageResource(resId);  
    }  
  
    /** 
     * 设置显示的文字 
     */  
    public void setTextViewText(String text) {  
        textView.setText(text);  
    }  
}

最后,要的时候使用定义好的MyLinearLayout控件。

蘑菇饭资讯
推荐于2016-05-21 · TA获得超过6万个赞
知道大有可为答主
回答量:1.7万
采纳率:90%
帮助的人:1.2亿
展开全部
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册
最近通过看别人代码和网上搜索,发现现在自定义LinearLayout的方式有三种。
第一种是在扩展的LinearLayout构造函数中使用Inflater加载一个布局,并从中提取出相关的UI组件进行封装,形成一个独立的控件。在使用该控件时,由于它所有的子元素都是在运行时通过代码动态创建的,所以该控件只能以一个独立控件的形式在Layout文件中声明,例如:
public class CustomLayout extends LinearLayout{

public CustomLayout(Context context){
LayoutInflater mInflater = LayoutInflater.from(context);
View myView = mInflater.inflate(R.layout.receive, null);
addView(myView);

}

}
< LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
androidundefinedrientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
androidundefinedrientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button" />
</LinearLayout>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

< /LinearLayout>

第二种方式是:在自定义控件中声明它的所有子元素,然后在Layout文件中像使用LinearLayout一样去进行布局,不过切记:自定义控件Code中声明的UI元素必须与Layout文件中声明的元素保持一致,否则,在代码中无法找到对应的控件;最后,在自定义控件的onInflateFinish中通过findViewById将layout中声明的控件跟代码中声明的控件匹配起来,例如有某个自定义控件:public class CustomLayout extends LinearLayout{
ListView mListView; //代码中声明的控件
XXXX; //针对UI控件封装的操作
}
Layout文件中使用该布局进行声明:
<com.XX.CustomLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
androidundefinedrientation="vertical" >
<ListView android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/ListView01"
/>
<.........>
< /com.XX.CustomLayout>
最后在代码中进行匹配:
protected void onFinishInflate()
{
mListView=(ListView)findViewById(R.id.ListView01);
mListView.setAdapter(mAdapter);
mListView.setSelector(new ColorDrawable(Color.TRANSPARENT));
mListView.setBackgroundColor(0xF3EEE5);
mListView.setCacheColorHint(0);
mListView.setDivider(null);

}

第三种方式是:这个自定义VIEW中的任何控件都不是通过XML文件来定义的,而是在JAVA代码中通过动态生成的,然后再addView()加入到你自定义的View中,
如:
private class SpeechView extends LinearLayout {
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式