1

我的部分布局有问题。我正在以编程方式添加按钮,因为我想做一些类似面包屑的事情。我的解决方案效果很好。如果我在第一个活动中,我会显示一个按钮。如果我转到第二个,我会显示两个按钮。这是代码:

public class TabsGenerator extends LinearLayout{



    public TabsGenerator(Context context) {
        super(context);
    }

    public View addNewLinearLayout(Context context, ArrayList<String> descriptions) {
        final HorizontalScrollView horizontalView = new HorizontalScrollView(context);
        LinearLayout linearLayout = new LinearLayout(context);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        params.height = 60;
        linearLayout.setLayoutParams(params);
        horizontalView.setLayoutParams(params);
        postDelayed(new Runnable() {
            public void run() {
                horizontalView.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
            }
        }, 100L);
        linearLayout.setGravity(Gravity.TOP);
        List<View> components = getButtons(context, descriptions);
        for(View component : components) {
           linearLayout.addView(component);
        }
        horizontalView.addView(linearLayout);

        return horizontalView;
    }
    public List<View> getButtons(Context context, ArrayList<String> descriptions) {
        List<View> buttons = new ArrayList<View>();
        for(int i = 0; i < descriptions.size(); i++) {
           buttons.add(createButton(context,i, descriptions));
        }
        return buttons;
    }

    public View createButton(final Context context, final int i, final ArrayList<String> descriptions){

         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            params.leftMargin = -20;
        final Button button = new Button(context);
        button.setText(SecondActivity.descriptions.get(i));
        button.setBackgroundDrawable(getResources().getDrawable(R.drawable.paseknawigacji));
        button.setHorizontallyScrolling(true);
        button.setEllipsize(TruncateAt.END);
        button.setSingleLine();
        button.setWidth(20);
        if(i==1)
            button.bringToFront();
        button.setLayoutParams(params);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                ActivityManager am = (ActivityManager) context.
                        getSystemService(Activity.ACTIVITY_SERVICE);
                String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
                String className = am.getRunningTasks(1).get(0).topActivity.getClassName();
                final String StringClassname = packageName+"."+descriptions.get(i);
                Class<?> c = null;
                if(StringClassname != null) {
                    try {
                        c = Class.forName(StringClassname );
                    } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                Intent intent = new Intent();
                intent.setClassName(context,StringClassname);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                if(!(StringClassname.contains(className))){
                    for(int j = 0; j<descriptions.size()-1;j++)
                        if(i<descriptions.size()-1)
                            descriptions.remove(i+1);

                    context.startActivity(intent);

                }
            }
        });
        return button;
    }
}

我有一个问题,因为按钮已添加到布局中,但每个按钮都以三角形结尾。当我添加第二个按钮时,他覆盖了这个形状。它的外观是这样的: 在此处输入图像描述 我想把每个按钮都放在前端。我怎么能这样做?

编辑:也许是在android中创建面包屑的其他方法?

4

4 回答 4

0

我认为您的布局不适用于线性布局,因为我注意到在线性布局中使用前置时,您会自动将其设置在总端(例如,它不再是按钮 1 按钮 2 按钮 3 而是按钮 1 按钮 3 按钮 2 )。您将需要使用相对布局或类似的东西。这可能会为您的代码添加一些逻辑,但否则应该没问题。

于 2013-03-11T16:46:56.167 回答
0

尝试以相反的顺序添加按钮

你的代码

    List<View> components = getButtons(context, descriptions);
    for(View component : components) {
       linearLayout.addView(component);
    }

现在以相反的顺序

    List<View> components = getButtons(context, descriptions);
    for(int i = components.size() - 1; i >= 0; i --) {
       View component = components.get (i);
       linearLayout.addView(component);
    }

(代码未编译,可能有错误)

于 2013-02-27T08:29:44.737 回答
0

尝试这个

thirdButton.bringtoFront();
SecondButton.bringToFront();

您将看到第三个和第二个按钮的三角形形状。

希望这会奏效

于 2013-02-27T08:31:14.843 回答
0

也许您可以尝试在按钮中设置高度但我认为 leftMargin= -20 是您看不到结尾三角形的原因

于 2021-08-24T22:09:40.893 回答