以编程方式添加没有可见边距的按钮

时间:2014-12-30 10:39:39

标签: java android button layout

我有一个以编程方式为布局添加按钮的类,但是我需要添加的按钮与布局的底部齐平并且相互之间没有可见的边距。

正如您在附带的屏幕截图中看到的那样 - 按钮下方,按钮之间以及按钮左侧和右侧都有一个边距。我需要没有边距 - 按钮应该填充整个布局的下半部分。

screenshot of the problem

这是我的容器布局的xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/someclass_rootlayout"
android:orientation="vertical"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="somepackage.someclass"
>


<LinearLayout
    android:id="@+id/someclass_buttonlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:gravity="bottom"
    android:orientation="horizontal"
    />

</LinearLayout>

这是我的代码,用于在一个类中以编程方式添加按钮,该类接收包含要添加的按钮的String名称的数组(buttonNames)作为输入。出于测试目的,我总是传递一个包含两个元素的数组,并将它们放置在布局的左侧和右侧。

private Window window;
private WindowManager.LayoutParams windowParams;

private int resourceIdentifier = 0;

...

 @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.someclass_fragment, container, false);
    ButterKnife.inject(this, view);

    window = getDialog().getWindow();

    windowParams = window.getAttributes();

    window.requestFeature(Window.FEATURE_NO_TITLE);

    someclass_buttonlayout.setWeightSum(buttonNames.size());

    for (String string : buttonNames) {
        addNewButton(string);
        resourceIdentifier++;
    }

    return view;
}

private void addNewButton(String name) {
    Button newbutton = new Button(context);
    newbutton.setText(name);
    newbutton.setId(resourceIdentifier);
    newbutton.setTextColor(getResources().getColor(R.color.black));
    newbutton.setMinHeight(0);
    newbutton.setMinWidth(0);
    newbutton.setShadowLayer(0,0,0,0);
    newbutton.setBottom(0);
    newbutton.setPadding(0,0,0,0);

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    if (resourceIdentifier==0) {
        layoutParams.gravity = Gravity.LEFT;
    } else {
        layoutParams.gravity = Gravity.RIGHT;
    }

    layoutParams.weight = 1;

    newbutton.setLayoutParams(layoutParams);

    newbutton.setOnClickListener(this);

    newbutton.setTag(name);
    someclass_buttonlayout.addView(newbutton);

}

有没有人有任何想法为什么尽管这些按钮仍然有一个边缘,如果有任何方法可以删除该边际?

2 个答案:

答案 0 :(得分:2)

在动态创建按钮时,您应该为按钮或按钮添加背景颜色:

newbutton.setBackgroundColor(Color.parseColor("#848482")); //#848482 is dark gray

答案 1 :(得分:0)

将背景颜色或可绘制设置为按钮。这将删除填充以及边距。