答えて
はい、それは0
public void wrapTabIndicatorToTitle(TabLayout tabLayout, int externalMargin, int internalMargin) {
View tabStrip = tabLayout.getChildAt(0);
if (tabStrip instanceof ViewGroup) {
ViewGroup tabStripGroup = (ViewGroup) tabStrip;
int childCount = ((ViewGroup) tabStrip).getChildCount();
for (int i = 0; i < childCount; i++) {
View tabView = tabStripGroup.getChildAt(i);
//set minimum width to 0 for instead for small texts, indicator is not wrapped as expected
tabView.setMinimumWidth(0);
// set padding to 0 for wrapping indicator as title
tabView.setPadding(0, tabView.getPaddingTop(), 0, tabView.getPaddingBottom());
// setting custom margin between tabs
if (tabView.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) tabView.getLayoutParams();
if (i == 0) {
// left
setMargin(layoutParams, externalMargin, internalMargin);
} else if (i == childCount - 1) {
// right
setMargin(layoutParams, internalMargin, externalMargin);
} else {
// internal
setMargin(layoutParams, internalMargin, internalMargin);
}
}
}
tabLayout.requestLayout();
}
}
private void settingMargin(ViewGroup.MarginLayoutParams layoutParams, int start, int end) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
layoutParams.setMarginStart(start);
layoutParams.setMarginEnd(end);
} else {
layoutParams.leftMargin = start;
layoutParams.rightMargin = end;
}
}
短い答えは "ノー" です。ここに説明があります。
インジケータ
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// Thick colored underline below the current selection
if (mIndicatorLeft >= 0 && mIndicatorRight > mIndicatorLeft) {
canvas.drawRect(mIndicatorLeft, getHeight() - mSelectedIndicatorHeight,
mIndicatorRight, getHeight(), mSelectedIndicatorPaint);
}
}
を描くTabLayout内のプライベートクラスSlidingTabStrip
は、私がmIndicatorLeftとmIndicatorRightは何が必要であると考えているがあります。これらのフィールドは、同じクラスに設定されています
private void updateIndicatorPosition() {
final View selectedTitle = getChildAt(mSelectedPosition);
int left, right;
if (selectedTitle != null && selectedTitle.getWidth() > 0) {
left = selectedTitle.getLeft();
right = selectedTitle.getRight();
if (mSelectionOffset > 0f && mSelectedPosition < getChildCount() - 1) {
// Draw the selection partway between the tabs
View nextTitle = getChildAt(mSelectedPosition + 1);
left = (int) (mSelectionOffset * nextTitle.getLeft() +
(1.0f - mSelectionOffset) * left);
right = (int) (mSelectionOffset * nextTitle.getRight() +
(1.0f - mSelectionOffset) * right);
}
} else {
left = right = -1;
}
setIndicatorPosition(left, right);
}
そして最悪の事態はTabLayoutでSlidingTabStripフィールドはプライベートと最終であるということである:左と右のパラメータは次の方法で計算されている
private void setIndicatorPosition(int left, int right) {
if (left != mIndicatorLeft || right != mIndicatorRight) {
// If the indicator's left/right has changed, invalidate
mIndicatorLeft = left;
mIndicatorRight = right;
ViewCompat.postInvalidateOnAnimation(this);
}
}
。
private final SlidingTabStrip mTabStrip;
完全に新しいTabLayoutを作成せずに必要なものを達成する方法はありません。あなたは、テキストよりも小さくなるようにストリップを必要としない場合
=埋めるパディングは左右12に、インジケータはの終わりで停止2番目のタブタイトル。延長しなかった。その可能性がある場合、他の面を包む方法はありませんか? @StasMelnychenko –
"重力を設定すると、塗りつぶしを左右に12度にする - ここではどのプロパティを意味しますか? TabLayout? ID = "@ + ID /タブ" アンドロイド:layout_toRightOf = "@ + ID/loginback" アンドロイド:layout_width = "match_parent" アンドロイドXML '
:layout_height = "wrap_content" アンドロイド:背景= "@カラー/ colorPrimary" アンドロイド:layout_marginRight = "20dp" _ **アンドロイド:paddingRightは= "12dp" アプリ:tabGravity = "埋める" アンドロイド:paddingLeft =」 12dp "** アンドロイド:layout_marginLeft =" 40dp "/> ' –
、これは動作するはずです:
public static void reduceMarginsInTabs(TabLayout tabLayout, int marginOffset) {
View tabStrip = tabLayout.getChildAt(0);
if (tabStrip instanceof ViewGroup) {
ViewGroup tabStripGroup = (ViewGroup) tabStrip;
for (int i = 0; i < ((ViewGroup) tabStrip).getChildCount(); i++) {
View tabView = tabStripGroup.getChildAt(i);
if (tabView.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
((ViewGroup.MarginLayoutParams) tabView.getLayoutParams()).leftMargin = marginOffset;
((ViewGroup.MarginLayoutParams) tabView.getLayoutParams()).rightMargin = marginOffset;
}
}
tabLayout.requestLayout();
}
}
が追加のポイントについては、各タイトルのテキストサイズを確認できます。
私のために働いていない –
あなたのフィードバックのために@ Vishvadaveありがとう、あなたの設定についての詳細を提供できますか? –
それは両方のアンドロイドの7.0と4.4の仕事です – WhiteBanana
にパディングを設定するタイトルとしてタブインジケータをラップすることが可能です私はSDKのバージョンが必要わから注意していますが、あなたは直接それを行うことができますあなたのXMLファイル、app namespaceを使ってパディング属性を追加します。
ちょうどあなたのTabLayoutは次のようになります、あなたの親が彼の答えはあまりにもlayouが、その希望:)
おかげでレオンのためにあなたがxmlns:app="http://schemas.android.com/apk/res-auto"
を移動することができます
<android.support.design.widget.TabLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...
app:tabPaddingEnd="0dp"
app:tabPaddingStart="0dp"
</android.support.design.widget.TabLayout>
達成するために私を導くことそれはXMLによるものです。
さまざまなソリューションで2時間試しましたが、どれも完全な効果がありません。
tabviewのパディングに問題があります。パディングをすべて0に設定しても、
異なるタブのパディングが異なるため、TextView
のテキストのサイズが異なります。
私は完全に解決したこのライブラリを見つけました。
https://github.com/H07000223/FlycoTabLayout
@Stas Melnychenkoは、TabLayout
を書き換えない限り、おそらくそれを行うことはできないと言っています。そして、このライブラリは、TabLayout
を書き換えます。
あなたはスタイルを使ってそれを行うことができます。
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
style="@style/AppTabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
のstyles.xmlで:レイアウトXMLで
iは重力を設定
<style name="AppTabLayout" parent="Widget.Design.TabLayout">
<item name="android:layout_marginLeft">40dp</item>
<item name="android:layout_marginRight">40dp</item>
</style>
- 1. 3/6タブhtmlレイアウト。タブが全体の幅を占める
- 2. ActionBarタブの幅
- 3. アンドロイド:タブ上のテキストや色、タブのレイアウト
- 4. Android:タブ内のタブ
- 5. Androidタブのレイアウト - サイズを変更
- 6. タブのレイアウトをカスタマイズする
- 7. タブのタイトルにAndroidカスタムフォントを設定する
- 8. Android - タブ、MapView、タブ内のアクティビティ
- 9. Windows Phone Appcelerator、タブのタイトル
- 10. 各タブのアクションバーのタイトルを変更するandroid
- 11. CKEDITORのデフォルトのタブ幅の幅
- 12. 最大タブ幅
- 13. オンザフライでタブのタイトルを設定する
- 14. MD-タブ非表示のタイトルは、唯一のタブ
- 15. Android 2つの同じタブのタブ
- 16. ActionBarタブの太さ/幅
- 17. Androidタブのアイコン
- 18. Androidタブのフラグメントフォーマットバグ
- 19. Androidマーケットスタイルのタブ
- 20. Androidタブのボタン
- 21. AndroidのフラグメントJava内のタブのテキスト/タイトルを取得
- 22. Visual Studioのタイトルなしタブのタイトルを変更するコード
- 23. 画像とappbarのタイトルをスクロールし、Androidではタブを残す
- 24. タブ付きレイアウト内にAndroidグリッドビューを表示するには
- 25. コアテキストの幅を調整するタブ
- 26. jquery UIタブ幅100%
- 27. タブ可動のTabControl - 選択したタブの項目幅
- 28. Androidのタブのアクションバー
- 29. Androidのタブのライフサイクル
- 30. TabLayoutのタブの幅が異なる
ありがとう@リオン、それは私のためにスクロール可能なTabLayout(tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE))を使用して働いた – Herman
これは働いた。 app:tabPadding = "0dp" – dazza5000
私にとってうまくいくよ – malli