Android button.setWidth() 什么都不做

Android button.setWidth() not doing anything

我有一个控制软键盘的inputMethodService。这是

的相关部分
@Override
public View onCreateInputView() {
    LayoutInflater lInflate = getLayoutInflater();
    Resources res = getResources();


    LinearLayout inputView = (LinearLayout) lInflate.inflate(R.layout.copypasta, null);

    Button tab_navySeal = (Button) inputView.findViewById(R.id.tab_navySeal);
    Button tab_thatsome = (Button) inputView.findViewById(R.id.tab_thatsome);
    Button tab_thethingis = (Button) inputView.findViewById(R.id.tab_thethinggis);
    Button tab_identify = (Button) inputView.findViewById(R.id.tab_identify);
    Button tab_othercopypasta = (Button) inputView.findViewById(R.id.tab_otherpasta); 


    int sW = res.getDisplayMetrics().widthPixels;

    int bWidth = sW/5;
    Log.i("DEBUG_TAG", Integer.toString(bWidth));
    if(bWidth > 100) {
        tab_navySeal.setWidth(bWidth);
        tab_identify.setWidth(bWidth);
        tab_thatsome.setWidth(bWidth);
        tab_thethingis.setWidth(bWidth);
        tab_othercopypasta.setWidth(bWidth);

    }

    return inputView;
}

此代码的目的是,如果屏幕足够大,每个按钮将占屏幕宽度的 1/5。否则,如果屏幕很小,按钮将只有 100dp(这很好,因为它们被包裹在 HorizontalScrollView 中)。

然而,当我打开软键盘时实际上什么也没有发生。

这是问题的图片:

顶部的按钮每个应占屏幕的 1/5,而不是 100dp 宽。如果这很重要,每个按钮的宽度在 XML 中设置为 100dp(尽管我认为这不重要,因为以编程方式设置宽度应该覆盖 XML)。

您可以尝试使用这样的新宽度设置 LayoutParams -

tab_navySeal.setLayoutParams (new LayoutParams(bWidth, LayoutParams.WRAP_CONTENT);

不幸的是,设计 Android 的人认为程序员太愚蠢,不知道他们想把东西放在应用程序中的什么地方,也太愚蠢,不知道他们想要东西的大小。因此像 setWidth 这样的方法不会设置宽度。你必须通读一页又一页关于布局的废话,才能离有效的东西更近一步。抱歉,我对布局了解不够,无法提供帮助,但我很高兴您强调了 Android 在这方面的设计有多糟糕。