Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置Android选项卡的样式以获得3d外观?_Android_Android Layout_Tabs_Android Tabhost_Nine Patch - Fatal编程技术网

如何设置Android选项卡的样式以获得3d外观?

如何设置Android选项卡的样式以获得3d外观?,android,android-layout,tabs,android-tabhost,nine-patch,Android,Android Layout,Tabs,Android Tabhost,Nine Patch,我想创建一个Android选项卡视图,如下图所示: 我想去罗马有很多路,但我想我还没有找到理想的路。我的想法是剪下一个分隔器和一个活动分隔器,并将它们放在按钮之间。但是,我不知道这是否是一个很好的解决方案,因为我仍然需要为第一个和最后一个按钮设置不同的样式。我已经为周围的(灰色)容器打了一个9补丁 我还考虑过为红色条制作一个红色9补丁,而不仅仅是设计所选按钮的样式。这个解决方案的问题是,我仍然需要根据按钮的数量来放置顶部的对角线白线 有谁能为我提供更好的解决方案吗?这里有另一种方法:将标题与选

我想创建一个Android选项卡视图,如下图所示:

我想去罗马有很多路,但我想我还没有找到理想的路。我的想法是剪下一个分隔器和一个活动分隔器,并将它们放在按钮之间。但是,我不知道这是否是一个很好的解决方案,因为我仍然需要为第一个和最后一个按钮设置不同的样式。我已经为周围的(灰色)容器打了一个9补丁

我还考虑过为红色条制作一个红色9补丁,而不仅仅是设计所选按钮的样式。这个解决方案的问题是,我仍然需要根据按钮的数量来放置顶部的对角线白线


有谁能为我提供更好的解决方案吗?

这里有另一种方法:将标题与选项卡分开。是的,有点复杂,但好处是:

  • 它允许您定义常用选项卡样式
  • 支持任意数量的按钮
  • 在这张图片上,按钮的宽度不同,因此实际上可能需要在标题左侧添加一个
    ImageView

    让我们将标题视图创建为线性布局。我们可以使用相同的
    layou-weight
    设置上部分隔器和可伸缩间隙

    public class HeaderLayout extends LinearLayout {
    
        public HeaderLayout(Context context) {
            super(context);
            initView();
        }
    
        public HeaderLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            initView();
        }
    
        public void setNumberOfColumns(int number) {
            removeAllViews();
            for (int i = 0; i < number; i++) {
                addView(getColumnView(), getColumnLayoutParams());
                // We don't need a divider after the last item
                if (i < number - 1) {
                    addView(getDividerView(), getDividerLayoutParams());
                }
            }
        }
    
        private void initView() {
            setBackgroundResource(R.drawable.header_bg);
        }
    
        private View getColumnView() {
            return new View(getContext());
        }
    
        private View getDividerView() {
            ImageView dividerView = new ImageView(getContext());
            dividerView.setImageResource(R.drawable.header_divider);
            dividerView.setScaleType(ImageView.ScaleType.FIT_XY);
            return dividerView;
        }
    
        private LayoutParams getColumnLayoutParams() {
            return new LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f);
        }
    
        private LayoutParams getDividerLayoutParams() {
            return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
        }
    
    }
    
    公共类标题布局扩展了线性布局{
    公共标题布局(上下文){
    超级(上下文);
    initView();
    }
    公共标题布局(上下文、属性集属性){
    超级(上下文,attrs);
    initView();
    }
    公共无效setNumberOfColumns(整数){
    移除所有视图();
    for(int i=0;i
    其中
    R.drawable.header\u bg
    是一个9补丁:

    R.drawable.header\u divider
    是一个简单(可选透明)位图:

    对我个人来说,为第一个和最后一个按钮制作不同的背景是最简单的解决方案,但这取决于实际任务