設定tablayout下劃線的寬度
package com.kjt.app.activity.myaccount.MyNewStoreTemplate; import android.content.res.Resources; import android.support.design.widget.TabLayout; import android.util.TypedValue; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import java.lang.reflect.Field; /** * Created by xiayujia on 2017/6/20. */ public class TabLayoutIndicator { /** * 修改tablayout寬度 * @param tabs * @param leftDip * @param rightDip */ public static void setIndicator(TabLayout tabs, int leftDip, int rightDip) { Class<?> tabLayout = tabs.getClass(); Field tabStrip = null; try { tabStrip = tabLayout.getDeclaredField("mTabStrip"); } catch (NoSuchFieldException e) { e.printStackTrace(); } tabStrip.setAccessible(true); LinearLayout llTab = null; try { llTab = (LinearLayout) tabStrip.get(tabs); } catch (IllegalAccessException e) { e.printStackTrace(); } int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, leftDip, Resources.getSystem().getDisplayMetrics()); int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, rightDip, Resources.getSystem().getDisplayMetrics()); for (int i = 0; i < llTab.getChildCount(); i++) { View child = llTab.getChildAt(i); child.setPadding(0, 0, 0, 0); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1); params.leftMargin = left; params.rightMargin = right; child.setLayoutParams(params); child.invalidate(); } } public static void setIndicator(TabLayout tabLayout) { try { //拿到tabLayout的mTabStrip屬性 Field mTabStripField = tabLayout.getClass().getDeclaredField("mTabStrip"); mTabStripField.setAccessible(true); LinearLayout mTabStrip = (LinearLayout) mTabStripField.get(tabLayout); // int dp10 = SM.dip2px(getContext(), 10); for (int i = 0; i < mTabStrip.getChildCount(); i++) { View tabView = mTabStrip.getChildAt(i); //拿到tabView的mTextView屬性 Field mTextViewField = tabView.getClass().getDeclaredField("mTextView"); mTextViewField.setAccessible(true); TextView mTextView = (TextView) mTextViewField.get(tabView); tabView.setPadding(0, 0, 0, 0); //因為我想要的效果是 字多寬線就多寬,所以測量mTextView的寬度 int width = 0; width = mTextView.getWidth(); if (width == 0) { mTextView.measure(0, 0); width = mTextView.getMeasuredWidth(); } //設定tab左右間距為10dp 注意這裡不能使用Padding 因為原始碼中線的寬度是根據 tabView的寬度來設定的 LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams(); params.width = width ; params.leftMargin = 57; params.rightMargin = 57; tabView.setLayoutParams(params); tabView.invalidate(); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
相關推薦
設定tablayout下劃線的寬度
package com.kjt.app.activity.myaccount.MyNewStoreTemplate; import android.content.res.Resources; import android.support.design.widget.Ta
修改TabLayout下劃線寬度,以及在Api28下遇到的問題—— tabLayout.getDeclaredField 空指標以及水波紋背景問題
在API28之前,我們修改TabLayout下劃線寬度,程式碼如下: /** * 設定tabLayout下劃線的寬 */ public static void setIndicator(TabLayout tabs, int leftDip, int rightD
設定tablayout下劃線長度的方法
注意 最新的TabLayout 下劃線 mTabStrip 改為slidingTabIndicator public static void setIndicator(TabLayout tabs,
Android開發 設定tablayout下劃線長度和內容保持一致
廢話不多說,直接看一下效果吧: 改變下劃線和內容的長度一致可以給使用者更好的體驗,在這裡主要使用反射的方式,直接上程式碼吧 public static void reflex(f
原始碼解讀android 5.0控制元件TabLayout無法自定義下劃線寬度問題!
首先我要說的是TabLayout這個控制元件非常好用,隨便搜尋下網上一大堆的關於TabLayout的用法,因此我也就不具體介紹TabLayout的使用了。 這裡我們談談為什麼TabLayout無法自定義下劃線寬度問題,廢話不多說,上原始碼: 首先找遍原始
修改TabLayout下劃線的寬度和文字和線的距離
1、寫個工具類 封裝: import android.content.res.Resources; import android.support.design.widget.TabLayout; import android.util.TypedValue; import android.view.View
TabLayout設置下劃線(Indicator)寬度
csdn lac 獲取 .net print 原因 通過 nsh gin 再戰TabLayout之下劃線寬度 這周的需求搞定之後,想到之前有一個小瑕疵,反正沒什麽事,索性較量較量 如圖官方原版就是小瑕疵,反射版本就是最終 解決方案-Demo源碼 先講解決方案。直接貼
TabLayout設定下劃線(Indicator)寬
因為TabLayout中系統是強制設定所有TabView的寬度為最寬那個TabView的寬度,而下劃線寬度即為TabView寬度,所以需要自定義下劃線寬度時,解決方法如下://瞭解原始碼得知:下劃線的寬度是根據TabView的寬度來設定的 tabLayout.post((
設定TabHost中的Tab標籤大小,字型的顏色,下劃線的長度,使Tab之間可以有間隔
private void updateTab(final TabHost tabHost) { for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { View view = tabHost.getT
Android TabLayout在與viewpager AppBarLayout一起使用時出現tab選中後下劃線滑動緩慢,卡頓異常解決方案
今天早上剛測試發現的一個問題,之前沒有注意到,特別尷尬感覺,之前經常使用TabLayout和viewpager聯動切換碎片,異常的情況如下圖展示: 佈局程式碼如下: <?xml version="1.0" encoding="utf-8"?> <android.s
Android 如何使Tablayout內容和下劃線長度相同?
我們在使用Tablayout選項卡控制元件的時候經常要根據專案需求做一些改動,比如如何使Tablayout內容和下劃線長度相同,類似頭條選項卡那種。通常我們的策略是通過反射的機制去改變Tabview的長度。下面直接貼程式碼: public void setIndicator(){
java字型設定,包括大小,顏色,加粗,下劃線,對齊,斜體的設定
import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java
WPS文字設定奇偶頁首、下劃線的方法步驟
這個問題困擾了我一天,問了無數人都不會,最後還是自己無意間網上查到一個點給了我靈感。 本文將解決以下問題: 1、頁首新增下劃線、設定下劃線的粗細? 2、如何將奇偶頁的頁首設定成不一樣的格式,例如: 單
uilabel 的相關處理 類富文字(自動換行,設定行高,同一個label多種顏色,給文字加下劃線 首行縮排 等 等)
1.自動換行 UIFont *font=[UIFont systemFontOfSize:lableFont]; self.numberOfLines=0; self.lineBreakMode=NSLineBreakByWordWrapping; self.text=co
CSS下劃線與文字間距,下劃線粗細以及下劃線顏色的設定
最開始的時候瞭解下劃線的屬性是:text-decoration:underline;1但是,很遺憾的是,對於設計做的下劃線用瀏覽器預設屬性樣式很難調整,使用這個屬性並不能調整下劃線與文字的間距,而且對於下劃線的顏色也不好調整,而使用<u></u>這個標
android:為TextView新增樣式——下劃線,顏色,設定連結樣式及前背景色
實現下劃線及顏色設定: public class AtActivity extends Activity {LinearLayout ll; /** Called when the activity is first created. */ @Overr
TextView使用SpannableString設定某部分文字的各種屬性(點選、顏色、下劃線...)
public void setSpan(Object what, int start, int end, int flags) { super.setSpan(what, start, end, flags); } 這個方法的引數中的start 和 end 用
設定TextView部分文字下劃線並響應點選事件(SpannableString)
實現效果 textview中改變《服務條款》的顏色、增加下劃線。 實現關鍵點: SpannableString的使用 SpannableString spanText=new SpannableString(getString(R.string.d
Latex設定字型大小,加粗,加下劃線,變斜體
Latex 設定字型大小命令由小到大依次為:\tiny\scriptsize\footnotesize\small\normalsize\large\Large\LARGE\huge\Huge使用方法,例如:\large{這是大號字型} 加粗:\textbf{文字}數學模式
給文字設定下劃線或者刪除線
在一些app,尤其是購物類的app中,通常我們會用到用線刪除原價的功能,用以下程式碼可簡單實現: /** * 設定刪除線 * * @param tv */