精华内容
下载资源
问答
  • 主要介绍了Android App中的多个LinearLayout嵌套布局实例,利用线性布局来排列按钮是安卓应用布局中的常用做法,需要的朋友可以参考下
  • 欢迎来下载RecyclerView实现复杂界面,本demo是由本人去多方百度参考后写成, 易于会ListView的小伙伴们理解,如demo有问题可以加QQ:731712249(加Q请说明来意),也可以加入Android交流群讨论:586620031
  • a、创建一个Android项目,然后创建一FlowLayout继承于ViewGroup: public class FlowLayout extends ViewGroup { /** 因为只在代码中直接new,所以创建这构造方法就可以了 */ public FlowLayout(Context ...
  • 在做demo的时候我们或许只会用到一个layout布局,但是在现实的app开发中会在listView中嵌套多个layout布局文件,本demo就是实现多个布局的listView,但是要特别注意的是Listview中嵌入EditText时获取editText的值的...
  • 页面状态布局是开发中常见的需求,即页面在不同状态需要显示不同的布局,这篇文章主要介绍了Android 页面状态布局管理的开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android-PanesLibrary 是一个Android界面中多个面板的平板布局,可以让你非常轻松的创建原生的带多个面板的平板布局Android 应用。包括 一个滑动菜单和内容面板,在平板上菜单和多个面板一起显示。
  • Android多布局使用

    千次阅读 2018-07-23 19:10:39
    第一步:实体类必须实现MultiItemEntity,在设置数据的时候,需要给每一数据设置itemType public class MultipleItem implements MultiItemEntity { public static final int TEXT = 1; public static final ...

    第一步:实体类必须实现MultiItemEntity,在设置数据的时候,需要给每一个数据设置itemType

    public class MultipleItem implements MultiItemEntity {
        public static final int TEXT = 1;
        public static final int IMG = 2;
        private int itemType;
     
        public MultipleItem(int itemType) {
            this.itemType = itemType;
        }
     
        @Override
        public int getItemType() {
            return itemType;
        }
    }
    

    第2步:在构造里面addItemType绑定type和layout的关系

    public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem, BaseViewHolder> {
     
        public MultipleItemQuickAdapter(List data) {
            super(data);
            addItemType(MultipleItem.TEXT, R.layout.text_view);
            addItemType(MultipleItem.IMG, R.layout.image_view);
        }
     
        @Override
        protected void convert(BaseViewHolder helper, MultipleItem item) {
            switch (helper.getItemViewType()) {
                case MultipleItem.TEXT:
                    helper.setImageUrl(R.id.tv, item.getContent());
                    break;
                case MultipleItem.IMG:
                    helper.setImageUrl(R.id.iv, item.getContent());
                    break;
            }
        }
     
    }
    

    整体使用时候:

    public class FirstAdapter extends BaseMultiItemQuickAdapter<FirstBean.ResultBean.ListBean,BaseViewHolder>{
    
        /**
         * Same as QuickAdapter#QuickAdapter(Context,int) but with
         * some initialization data.
         *
         * @param data A new list is created out of this one to avoid mutable list
         */
        List<FirstBean.ResultBean.ListBean> data;
        public FirstAdapter(List<FirstBean.ResultBean.ListBean> data) {
            super(data);
            this.data=data;
            //跟据类型的不同加入不同的布局
            addItemType(1, R.layout.item1);
            addItemType(2, R.layout.item2);
            addItemType(3, R.layout.item3);
        }
    
        @Override
        protected void convert(BaseViewHolder helper, FirstBean.ResultBean.ListBean item) {
            //根据返回的类型初始化控件
            switch (helper.getItemViewType()){
                case 1:
                {
                    helper.setText(R.id.title1,item.getTitle());
                    helper.setText(R.id.title2,item.getTitle2());
                    Picasso.with(mContext).load(item.getFirstImg()).placeholder(R.mipmap.ic_launcher).into((ImageView)helper.getView(R.id.img1));
                    Picasso.with(mContext).load(item.getSecondImg()).placeholder(R.mipmap.ic_launcher).into((ImageView)helper.getView(R.id.img2));
    
                }
                    break;
                case 2:
                {
                    helper.setText(R.id.title,item.getTitle());
                    Picasso.with(mContext).load(item.getFirstImg()).placeholder(R.mipmap.ic_launcher).into((ImageView)helper.getView(R.id.img));
                }
                    break;
                case 3:
                    helper.setText(R.id.title,item.getTitle());
                    Picasso.with(mContext).load(item.getFirstImg()).placeholder(R.mipmap.ic_launcher).into((ImageView)helper.getView(R.id.img));
                    break;
            }
        }
    
        //根据要求返回不同的类型
        @Override
        public int getItemViewType(int position) {
            if(data.get(position).getSecondImg()!=null){
                return 1;
            }else if("2".equals(data.get(position).getMark())){
                return 2;
            }else {
                return 3;
            }
    
        }
    }

    效果图: 

     

     完成!!!

    展开全文
  • 这里体现命名的重要性,以及建立多个layout把xml分文别类的重要性了。 也许有同志问:xml布局中有tools:context="XXXX",可以知道哪个activity、fragment使用了它。 我想反问:那么在Adapter或者其它地方使用到呢?...

    当你项目xml布局很多时,如图一(没有截图完)是不是看着有点懵,一开始你还能分得清什么布局是做什么的,那么过段时间后你还能知道吗?这里体现命名的重要性,以及建立多个layout把xml分文别类的重要性了。

    也许有同志问:xml布局中有tools:context="XXXX",可以知道哪个activity、fragment使用了它。
    我想反问:那么在Adapter或者其它地方使用到呢?不能一直:右键——Find Usages

                                           

                              图一                                                                                                     图二

    一.在需要的gradle下写(如果项目是模块化的,在需要的模块下的gradle):

    android {
     
        sourceSets{
            main{
                res.srcDirs=[
                        'src/main/res/zhou',
                        'src/main/res/mo',
                        'src/main/res/zhoumo',
                        'src/main/res/layout',//必须要有
                        'src//main/res',//必须要有,倒数两个顺序必须是这样子,不能乱
                ]
            }
        }
    
    }

    二.在res新建文件夹,如图二,zhou、mo、zhoumo文件夹下的layout是必须要有的,values可选。这些文件夹名字我随意起的,最好的是按功能命名文件夹,eg:learn(关于学校功能的xml布局放在里面)、tourism(关于旅游的布局放在里面)……

    三.完工 ,写得不好的地方请给我留言,我改进。

    展开全文
  • 个布局android4.0新增的布局。这个布局只有4.0之后的版本才能使用。 不过新增了一些东东 ①跟LinearLayout(线性布局)一样,他可以设置容器中组件的对齐方式 ②容器中的组件可以跨多行也可以跨列(相比...
  • 我有这个布局正常工作,相对布局与文本视图和两个按钮均匀分布在它下面.android:layout_width="fill_parent"android:layout_height="wrap_content" android:padding="5px"android:visibility="gone"android:layout_...

    我有这个布局正常工作,相对布局与文本视图和两个按钮均匀分布在它下面.

    android:layout_width="fill_parent"

    android:layout_height="wrap_content" android:padding="5px"

    android:visibility="gone"

    android:layout_below="@+id/ad"

    android:background="#80000000">

    android:layout_height="wrap_content" android:text="Entry Popup..."

    android:textColor="#ffffffff"

    android:textSize="20sp" />

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:layout_below="@id/title">

    android:layout_height="fill_parent"

    android:layout_width="0dip"

    android:layout_weight="1"/>

    android:layout_width="0dip"

    android:layout_weight="1"

    android:layout_height="fill_parent"/>

    但是运行layoutopt它说“这个TableRow布局或它的TableLayout父级可能无用”.

    有没有办法在没有表格的情况下进行此布局?

    展开全文
  • 解决Android的ListView里面多套item内含多个EditText数据混乱问题
  • 本篇文章主要介绍了Android 简单实现一流式布局的示例,分享给大家,具体如下: 流式布局应该是我们很常见的一种布局了,在很场景下都会遇到它,例如:标签之类的功能等。用轮子不如造轮子来的爽,这里自己...
  • StatusView:简单的 Android 页面状态布局切换控件
  • 用于快速开发复杂List布局的框架
  • Android Studio 2.3.3做的线性布局例子,主要用到的标签有:<LinearLayout></LinearLayout>;主要用到的设置有:android:orientation="horizontal"、android:layout_weight="1"。
  • 在程序中有时候几个控件要放在一起,想随意放在布局上,而且不仅一个布局要使用,此时就想把这几个控件定义成一个新的View就好了,于是就有了下面这个类新的控件类SeekBarGroup.java,SeekBarGroup.java集成了三个...

    在程序中有时候几个控件要放在一起,想随意放在布局上,而且不仅一个布局要使用,此时就想把这几个控件定义成一个新的View就好了,于是就有了下面这个类新的控件类SeekBarGroup.java,SeekBarGroup.java集成了三个View,有两个TextView,一个SeekBar,就是一个显示时间的进度条,这只是一种应用思想,可以是任何View的集合

    下面先看下效果,就是一个普通的进度条加两个文本显示,


    关键代码

    package com.adayome.bddemo.widgets;
    
    import android.content.Context;
    import android.graphics.drawable.Drawable;
    import android.util.AttributeSet;
    import android.view.Gravity;
    import android.widget.RelativeLayout;
    import android.widget.SeekBar;
    import android.widget.SeekBar.OnSeekBarChangeListener;
    import android.widget.TextView;
    
    import com.adayome.bddemo.R;
    import com.adayome.bddemo.utils.LogUtils;
    
    public class SeekBarGroup extends RelativeLayout {
    
    	private static final int tv_start_id = 0x1111111;
    	private static final int tv_end_id = 0x1111112;
    	private static final int sb_time_id = 0x1111113;
    	private SeekBar sbTime;
    	private TextView tvStart;
    	private TextView tvEnd;
    	// 布局参数设置
    	private RelativeLayout.LayoutParams tvStartLp, tvEndLp, sbTimeLp;
    
    	public SeekBarGroup(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		setGravity(Gravity.CENTER);
    		initView(context);
    		// 用代码直接向布局中添加控件
    		addView(tvStart, tvStartLp);
    		addView(tvEnd, tvEndLp);
    		addView(sbTime, sbTimeLp);
    	}
    
    	private void initView(Context context) {
    		tvStart = new TextView(context);
    		tvEnd = new TextView(context);
    
    		// 设置每一个控件的布局参数
    		tvStartLp = new LayoutParams(LayoutParams.WRAP_CONTENT,
    				LayoutParams.WRAP_CONTENT);
    
    		tvEndLp = new LayoutParams(LayoutParams.WRAP_CONTENT,
    				LayoutParams.WRAP_CONTENT);
    
    		tvStart.setId(tv_start_id);
    		tvStart.setText("start");
    
    		tvEnd.setId(tv_end_id);
    		tvEnd.setText("end");
    
    		// 往布局参数中添加属性
    		tvStartLp
    				.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
    		tvStartLp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
    
    		tvEndLp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
    		tvEndLp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
    
    		initSeekBar(context);
    		LogUtils.i("-----initView");
    	}
    
    	private void initSeekBar(Context context) {
    		sbTime = new SeekBar(context);
    		sbTimeLp = new LayoutParams(LayoutParams.MATCH_PARENT,
    				LayoutParams.WRAP_CONTENT);
    		sbTimeLp.addRule(RelativeLayout.LEFT_OF, tv_end_id);
    		sbTimeLp.addRule(RelativeLayout.RIGHT_OF, tv_start_id);
    		sbTimeLp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
    		sbTime.setId(sb_time_id);
    		sbTime.setMax(100);
    		sbTime.setProgress(30);
    		Drawable d = context.getResources().getDrawable(
    				R.drawable.seekbar_style);
    		sbTime.setProgressDrawable(d);
    		Drawable thumb = context.getResources().getDrawable(
    				R.drawable.seek_thumb_pic);
    		sbTime.setThumb(thumb);
    		sbTime.setPadding(15, 0, 15, 0);
    		sbTime.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
    			@Override
    			public void onStopTrackingTouch(SeekBar seekBar) {
    				// TODO Auto-generated method stub
    
    			}
    
    			@Override
    			public void onStartTrackingTouch(SeekBar seekBar) {
    				// TODO Auto-generated method stub
    
    			}
    
    			@Override
    			public void onProgressChanged(SeekBar seekBar, int progress,
    					boolean fromUser) {
    				// TODO Auto-generated method stub
    				setStart(String.valueOf(progress));
    				LogUtils.i("onProgressChanged pro = " + progress);
    			}
    		});
    	}
    
    	public void setStart(String start) {
    		tvStart.setText(start);
    	}
    
    	public void setEnd(String end) {
    		tvEnd.setText(end);
    	}
    
    	public void setProgress(int progress) {
    		sbTime.setProgress(progress);
    	}
    
    	public int getMax() {
    		return sbTime.getMax();
    	}
    
    	public interface SeekBarGroupListener {
    		public void setStart(String start);
    
    		public void setEnd(String start);
    
    		public void onProgressChanged(int progress, boolean fromUser);
    	}
    }
    
    主要跟平常的控件一样使用就可以了,在布局中的定义

    <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" >
    
        <TextView
            android:id="@+id/tv_text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="测试2" />
    
        <com.adayome.bddemo.widgets.SeekBarGroup
            android:id="@+id/seekbar_group"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    调用方法

    package com.adayome.bddemo;
    
    import java.util.Random;
    import java.util.Timer;
    import java.util.TimerTask;
    
    import com.adayome.bddemo.widgets.SeekBarGroup;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.GestureDetector;
    import android.view.LayoutInflater;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnTouchListener;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.ProgressBar;
    import android.widget.RelativeLayout;
    import android.widget.SeekBar;
    import android.widget.SeekBar.OnSeekBarChangeListener;
    import android.widget.TextView;
    
    public class Fragment2 extends BaseFragment implements OnClickListener {
    	private static final String TAG = "Fragment2";
    	private Random mRan = new Random();
    	private SeekBarGroup group;
    
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		View v = inflater.inflate(R.layout.fragment_2, container, false);
    		return initWidgets(v);
    	}
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		timer.schedule(task, 1000, 1000); // 1s后执行task,经过1s再次执行
    	}
    
    	Handler handler = new Handler() {
    		public void handleMessage(Message msg) {
    			if (msg.what == 1) {
    				group.setProgress(mRan.nextInt(100));
    			}
    			super.handleMessage(msg);
    		};
    	};
    	Timer timer = new Timer();
    	TimerTask task = new TimerTask() {
    
    		@Override
    		public void run() {
    			// 需要做的事:发送消息
    			Message message = new Message();
    			message.what = 1;
    			handler.sendMessage(message);
    		}
    	};
    
    	private View initWidgets(View v) {
    		group = (SeekBarGroup) v.findViewById(R.id.seekbar_group);
    		group.setEnd(String.valueOf(group.getMax()));
    		return v;
    	}
    }
    




    展开全文
  • Android多页面布局

    2014-04-18 10:41:30
    简单例子 实现一个android上Fragment + ViewPager 的布局
  • Android自定义View设定到FrameLayout布局中实现组件显示的方法 分享,需要的朋友可以参考一下
  • 之前做项目的时候有圆角相关需求,在网上找了很多方案都不够满意,于是自己做了一个,目前已经使用了一段时间,更新了多个版本,我遇到的问题都进行了修复,并且添加了很多方便的可配置属性,以满足不同需求。...
  • 布局多个组件的样式的代码比较多有重复,说组件Button吧,代码: <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/red" android:textSize=...
  • 主要介绍了Android RecyclerView类型布局卡片解决方案,小编觉得挺不错的,现在分享给大家,也给大家做参考。一起跟随小编过来看看吧
  • 安卓一个Activity加载多个layout布局文件-附件资源
  • Android多分辨率布局多个layout

    千次阅读 2017-06-07 16:21:49
    如下目录: layout layout-land layout-port layout-land-1024x720 //1024x768横屏 ...在android3.0之前版本,要适配指定的分辨率,需将layout文件夹定义成如下名称: layout layout-1024x76
  • 我们可以看到,这RecyclerView中有多种item显示出来,那么具体怎么实现呢,其实在RecyclerView中,我们可以重写方法getItemViewType(),这方法会传进一参数position表示当前是第几Item,然后我们可以通过...
  • Android viewpage 多布局加载 带索引 带卡片预览 动画效果 无限滑动 多布局加载 带索引 带卡片预览 动画效果 无限滑动
  • 问题困扰了两三天,recyclerview在采用多种布局的情况下,在onBindViewHolder绑定的时候会,会将不会显示的布局用View.GONE隐藏起来,看似没有问题!但是上下滑动的时候会发生item显示错乱! 原本的item数据...
  • Android多语言布局layout

    2020-05-12 11:29:10
    1. 定义某种具体的语言资源layout eg:layout-ar 2. 同意放在layout-ldrtl目录 eg:layout-ldrtl 3.android:supportsRtl...eg:view布局android:layoutDirection="rtl" 5.优先级 layout-ar(语言级别) >...
  • RecyclerView 加载 adaper中创建并且加载布局 在activity 中调用adapter 的方法更新或者设置数据
  • <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_... android:padding

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 264,265
精华内容 105,706
关键字:

安卓多个布局