7

多くの回答を確認しましたが、これまでのところ役に立ちませんでした。

Android の TextView を拡張し、このカスタム ビューのマージンをコード内に設定しようとしています。これは、ボタンの押下などでそれらをインスタンス化するためです。LinearLayout に追加されます。それは私が得たものです:

public class ResultsView extends TextView {
    public ResultsView(Context context) {
        super(context);
        LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layout.setMargins(15, 15, 15, 15);
        setLayoutParams(layout);
    }
}

どこにもマージンの兆候はありません。

編集:追加したいかもしれません.xmlでマージン値を割り当てると、機能します。

4

3 に答える 3

17

問題は、余白を追加しようとしている時点で、layoutparams がまだ設定されていないことだと思います。ResultsView クラスでこのメソッドをオーバーライドしようとしないのはなぜですか。

       protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            MarginLayoutParams margins = MarginLayoutParams.class.cast(getLayoutParams());
            int margin = 15;
            margins.topMargin = margin;
            margins.bottomMargin = margin;
            margins.leftMargin = margin;
            margins.rightMargin = margin;
            setLayoutParams(margins);
        };

そして、コンストラクターにあるコードを削除します。このようにして、ビューのレイアウト オブジェクトがあることを確認するまでマージンが適用されます。これが役立つことを願っています。

よろしく!

于 2013-07-19T21:27:12.420 に答える
0

現在表示されているレイアウトにこのビューを追加する必要があります。あなたは次のステップを逃しています。だから今、あなたは次のようなものが必要です:

    currentlayout.addview(View);
于 2013-07-19T21:21:52.443 に答える