7

複数の画面サイズをサポートし、新しい ICS タブを正しく使用するために、Android アプリをフラグメントに変換しようとしています。以前は、このonWindowFocusChanged()メソッドを使用し、その中で次のコードを実行しました。基本的に、これにより、レイアウトが作成された後にレイアウトの動的な書式設定が行われました。

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

LinearLayout theLayout = (LinearLayout)inflater.inflate(R.layout.tab_frag2_layout, container, false);

getWidthEditButton = (ImageButton) theLayout.findViewById(R.id.buttonEditPoints);
buttonAddPointsManual = (ImageView) theLayout.findViewById(R.id.buttonAddPointsManual);

linearPointsUsed = (LinearLayout) theLayout.findViewById(R.id.linearLayoutPointsUsed);

int paddingLeftForTracker = linearPointsUsed.getPaddingLeft();
int paddingRightForTracker = getWidthEditButton.getWidth();

linearPointsUsed.setPadding(paddingLeftForTracker, 0, paddingRightForTracker, 0);
}

Fragments に移動したので、何らかの理由で paddingRightForTracker が 0 を返します。以前に幅を早く取得しようとしていた問題に遭遇したため、以前に onWindowFocusChanged に移動しましたが、Fragments では使用できません。奇妙なことに、paddingLeftForTracker は実際にはゼロ以外の値を返します。

paddingRightForTracker を手動で設定すると、変更が行われるため、コードが実行されていることがわかります。getWidth が 0 を返す理由がわかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

22

onActivityCreated() で試してみることができます。そのため、これらのビューへの参照を onCreateView に保存してから、onActivityCreated() でそれらにアクセスします。ビューにアクセスしようとすると、ビューが完全に作成されていないと思います。そのため、幅が返されません。

http://developer.android.com/reference/android/app/Fragment.html#onActivityCreated(android.os.Bundle)


わかりましたので、幅を取得する別の方法を見つけました。私も onViewCreated、onCreateView、onResume のいずれでもボタン幅を取得できません。私はこれを見つけて試してみましたが、値を返しているので、うまくいくかもしれません!

ボタンの高さと幅を取得する方法

ViewTreeObserver vto = button.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
        width = button.getWidth();
        height = button.getHeight(); 
    }
});

参考までに、私はこのコードを onResume で実行したので、他のどこで機能するかは正確にはわかりません。

于 2012-07-21T19:57:00.887 に答える