アプリでタブの高さ(写真に表示)をピクセル単位で取得する必要があります。画面サイズに依存するタブの高さを知るのに役立つ情報が必要です。誰か助けてもらえますか?
前もって感謝します
実を言うと、コードでタブのサイズは必要ありません。同じサイズの各デバイスのタブの高さは同じだと思うので、画面のどの部分がタブを占めるのか知りたいのですが、
たとえば、1080 X 720ピクセルのデバイスがあり、タブは1/10の部分を占めます。つまり、タブの高さは108ピクセルになります。
先ほどのコメントで言いたかったのは、ここには Android ビューの高さと幅を取得するための一般的なソリューションがたくさんあるということでした。私は今このコードをテストしましたが、正常に動作しています。これを試して:
final RelativeLayout topLayout = (RelativeLayout) findViewById(R.id.topRelLayout);
ViewTreeObserver viewTreeObserver = topLayout.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if(Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= 16)
topLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
else
topLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int viewWidth = tabs.getWidth();
int viewHeight = tabs.getHeight();
Toast.makeText(HomeScreenActivity.this, "height = " + viewHeight + " width = " + viewWidth , 2000).show();
}
});
}
topRelLayout は xml ファイルのルート レイアウトの ID で、tabs はタブ ビューへの参照です。
次の簡単なコードでも問題なく動作します。
tabs.post(new Runnable() {
@Override
public void run() {
int w = tabs.getMeasuredWidth();
int h = tabs.getMeasuredHeight();
Toast.makeText(HomeScreenActivity.this, "height = " + h + " width = " + w , 2000).show();
}
});
いずれかのソリューションを使用すると、任意の画面サイズで任意のビューの高さ/幅を取得できます。
編集 :
編集した質問を読んだ後、タブ ウィジェットが占める画面の割合が必要だと思います。実装できることがわかっている唯一の解決策は次のとおりです。
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
final Display display = wm.getDefaultDisplay();
tabs.post(new Runnable() {
@Override
public void run() {
int h = tabs.getMeasuredHeight();
int screenHeight = 0;
if(Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= 13)
{
Point point = new Point();
display.getSize(point);
screenHeight = point.y;
}
else
screenHeight = display.getHeight();
double tabPart = (((double)h/(double)screenHeight) * 100);
Toast.makeText(HomeScreenActivity.this, "height = " + screenHeight + " tabPart = " + tabPart + " %", 2000).show();
}
});