Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
MVPArms
提交
2a948fb7
M
MVPArms
项目概览
门心叼龙
/
MVPArms
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
MVPArms
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2a948fb7
编写于
7月 24, 2018
作者:
J
JessYan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Improve AutoToolbar on arms-autolayout
上级
f3110481
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
88 addition
and
23 deletion
+88
-23
arms-autolayout/src/main/java/com/jess/arms/widget/autolayout/AutoToolbar.java
...ain/java/com/jess/arms/widget/autolayout/AutoToolbar.java
+88
-23
未找到文件。
arms-autolayout/src/main/java/com/jess/arms/widget/autolayout/AutoToolbar.java
浏览文件 @
2a948fb7
...
@@ -16,14 +16,21 @@
...
@@ -16,14 +16,21 @@
package
com.jess.arms.widget.autolayout
;
package
com.jess.arms.widget.autolayout
;
import
android.content.Context
;
import
android.content.Context
;
import
android.
support.annotation.Nullable
;
import
android.
content.res.TypedArray
;
import
android.support.v7.widget.Toolbar
;
import
android.support.v7.widget.Toolbar
;
import
android.text.TextUtils
;
import
android.util.AttributeSet
;
import
android.util.AttributeSet
;
import
android.util.TypedValue
;
import
android.view.View
;
import
android.view.View
;
import
android.
view.ViewGroup
;
import
android.
widget.TextView
;
import
com.jess.arms.widget.R
;
import
com.zhy.autolayout.AutoLayoutInfo
;
import
com.zhy.autolayout.AutoLayoutInfo
;
import
com.zhy.autolayout.utils.AutoLayoutHelper
;
import
com.zhy.autolayout.utils.AutoLayoutHelper
;
import
com.zhy.autolayout.utils.AutoUtils
;
import
com.zhy.autolayout.utils.DimenUtils
;
import
java.lang.reflect.Field
;
/**
/**
* ================================================
* ================================================
...
@@ -37,67 +44,125 @@ import com.zhy.autolayout.utils.AutoLayoutHelper;
...
@@ -37,67 +44,125 @@ import com.zhy.autolayout.utils.AutoLayoutHelper;
* ================================================
* ================================================
*/
*/
public
class
AutoToolbar
extends
Toolbar
{
public
class
AutoToolbar
extends
Toolbar
{
private
AutoLayoutHelper
mHelper
=
new
AutoLayoutHelper
(
this
);
private
static
final
int
NO_VALID
=
-
1
;
private
int
mTextSize
;
private
int
mSubTextSize
;
private
final
AutoLayoutHelper
mHelper
=
new
AutoLayoutHelper
(
this
);
public
AutoToolbar
(
Context
context
,
AttributeSet
attrs
,
int
defStyleAttr
)
{
super
(
context
,
attrs
,
defStyleAttr
);
TypedArray
a
=
context
.
obtainStyledAttributes
(
attrs
,
R
.
styleable
.
Toolbar
,
defStyleAttr
,
R
.
style
.
Widget_AppCompat_Toolbar
);
int
titleTextAppearance
=
a
.
getResourceId
(
R
.
styleable
.
Toolbar_titleTextAppearance
,
R
.
style
.
TextAppearance_Widget_AppCompat_Toolbar_Title
);
int
subtitleTextAppearance
=
a
.
getResourceId
(
R
.
styleable
.
Toolbar_subtitleTextAppearance
,
R
.
style
.
TextAppearance_Widget_AppCompat_Toolbar_Subtitle
);
mTextSize
=
loadTextSizeFromTextAppearance
(
titleTextAppearance
);
mSubTextSize
=
loadTextSizeFromTextAppearance
(
subtitleTextAppearance
);
TypedArray
menuA
=
context
.
getTheme
().
obtainStyledAttributes
(
attrs
,
R
.
styleable
.
Theme
,
defStyleAttr
,
R
.
style
.
ThemeOverlay_AppCompat
);
int
menuTextAppearance
=
menuA
.
getResourceId
(
R
.
styleable
.
Theme_actionBarTheme
,
R
.
style
.
ThemeOverlay_AppCompat_ActionBar
);
int
menuTextSize
=
loadTextSizeFromTextAppearance
(
menuTextAppearance
);
//防止 menu 定义 textSize,而 Toolbar 无定义 textSize 时,title 的 textSize 随 menu 变化
if
(
mTextSize
==
NO_VALID
)
mTextSize
=
menuTextSize
;
if
(
mSubTextSize
==
NO_VALID
)
mSubTextSize
=
menuTextSize
;
a
.
recycle
();
menuA
.
recycle
();
}
public
AutoToolbar
(
Context
context
,
AttributeSet
attrs
)
{
this
(
context
,
attrs
,
0
);
}
public
AutoToolbar
(
Context
context
)
{
public
AutoToolbar
(
Context
context
)
{
super
(
context
);
this
(
context
,
null
);
}
}
public
AutoToolbar
(
Context
context
,
@Nullable
AttributeSet
attrs
)
{
private
int
loadTextSizeFromTextAppearance
(
int
textAppearanceResId
)
{
super
(
context
,
attrs
);
TypedArray
a
=
getContext
().
obtainStyledAttributes
(
textAppearanceResId
,
R
.
styleable
.
TextAppearance
);
try
{
if
(!
DimenUtils
.
isPxVal
(
a
.
peekValue
(
R
.
styleable
.
TextAppearance_android_textSize
)))
return
NO_VALID
;
return
a
.
getDimensionPixelSize
(
R
.
styleable
.
TextAppearance_android_textSize
,
NO_VALID
);
}
finally
{
a
.
recycle
();
}
}
}
public
AutoToolbar
(
Context
context
,
@Nullable
AttributeSet
attrs
,
int
defStyleAttr
)
{
private
void
setUpTitleTextSize
()
{
super
(
context
,
attrs
,
defStyleAttr
);
CharSequence
title
=
getTitle
();
if
(!
TextUtils
.
isEmpty
(
title
)
&&
mTextSize
!=
NO_VALID
)
setUpTitleTextSize
(
"mTitleTextView"
,
mTextSize
);
CharSequence
subtitle
=
getSubtitle
();
if
(!
TextUtils
.
isEmpty
(
subtitle
)
&&
mSubTextSize
!=
NO_VALID
)
setUpTitleTextSize
(
"mSubtitleTextView"
,
mSubTextSize
);
}
private
void
setUpTitleTextSize
(
String
name
,
int
val
)
{
try
{
//反射 Toolbar 的 TextView
Field
f
=
getClass
().
getSuperclass
().
getDeclaredField
(
name
);
f
.
setAccessible
(
true
);
TextView
textView
=
(
TextView
)
f
.
get
(
this
);
if
(
textView
!=
null
)
{
int
autoTextSize
=
AutoUtils
.
getPercentHeightSize
(
val
);
textView
.
setTextSize
(
TypedValue
.
COMPLEX_UNIT_PX
,
autoTextSize
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
@Override
@Override
protected
void
onMeasure
(
int
widthMeasureSpec
,
int
heightMeasureSpec
)
{
protected
void
onMeasure
(
int
widthMeasureSpec
,
int
heightMeasureSpec
)
{
if
(!
isInEditMode
())
if
(!
this
.
isInEditMode
())
{
mHelper
.
adjustChildren
();
setUpTitleTextSize
();
this
.
mHelper
.
adjustChildren
();
}
super
.
onMeasure
(
widthMeasureSpec
,
heightMeasureSpec
);
super
.
onMeasure
(
widthMeasureSpec
,
heightMeasureSpec
);
}
}
@Override
@Override
protected
void
onLayout
(
boolean
changed
,
int
l
,
int
t
,
int
r
,
int
b
)
{
protected
void
onLayout
(
boolean
changed
,
int
l
,
int
t
,
int
r
,
int
b
)
{
super
.
onLayout
(
changed
,
l
,
t
,
r
,
b
);
super
.
onLayout
(
changed
,
l
,
t
,
r
,
b
);
}
}
@Override
@Override
public
LayoutParams
generateLayoutParams
(
AttributeSet
attrs
)
{
public
LayoutParams
generateLayoutParams
(
AttributeSet
attrs
)
{
return
new
LayoutParams
(
getContext
(),
attrs
);
return
new
LayoutParams
(
this
.
getContext
(),
attrs
);
}
}
public
static
class
LayoutParams
extends
Toolbar
.
LayoutParams
implements
AutoLayoutHelper
.
AutoLayoutParams
{
public
static
class
LayoutParams
extends
Toolbar
.
LayoutParams
private
AutoLayoutInfo
mDimenLayoutInfo
;
implements
AutoLayoutHelper
.
AutoLayoutParams
{
private
AutoLayoutInfo
mAutoLayoutInfo
;
public
LayoutParams
(
Context
c
,
AttributeSet
attrs
)
{
public
LayoutParams
(
Context
c
,
AttributeSet
attrs
)
{
super
(
c
,
attrs
);
super
(
c
,
attrs
);
mAuto
LayoutInfo
=
AutoLayoutHelper
.
getAutoLayoutInfo
(
c
,
attrs
);
this
.
mDimen
LayoutInfo
=
AutoLayoutHelper
.
getAutoLayoutInfo
(
c
,
attrs
);
}
}
@Override
@Override
public
AutoLayoutInfo
getAutoLayoutInfo
()
{
public
AutoLayoutInfo
getAutoLayoutInfo
()
{
return
mAuto
LayoutInfo
;
return
this
.
mDimen
LayoutInfo
;
}
}
public
LayoutParams
(
int
width
,
int
height
)
{
public
LayoutParams
(
int
width
,
int
height
)
{
super
(
width
,
height
);
super
(
width
,
height
);
}
}
public
LayoutParams
(
android
.
view
.
ViewGroup
.
LayoutParams
source
)
{
public
LayoutParams
(
ViewGroup
.
LayoutParams
source
)
{
super
(
source
);
super
(
source
);
}
}
public
LayoutParams
(
MarginLayoutParams
source
)
{
public
LayoutParams
(
MarginLayoutParams
source
)
{
super
(
source
);
super
(
source
);
}
}
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录