android 사용자 정의 View 및 Attr 스타일 스타일 스타일 스타일
선언:
안드로이드 개발에서 불가피하게 특정한 단추의 압력, 클릭, 초점 등 상태를 설정해야 한다. 보통 이런 문제에 대해 가장 원시적인 방식은 레이아웃 파일에서 직접 설정하는 것이다. 그러나 비교적 큰 프로젝트에 있어 이런 방식은 유지보수성이 좋지 않기 때문에 코드를 다시 사용하도록 해야 한다.Toggle Button, 라디오 Button, CheckBox, 스크롤 바 색상, Button 같은 컨트롤은 클릭할 때 상태 전환 전후 스타일이 다르다.
소개:
android 프로젝트에는 보통 세 개의 스타일 설정 자원 폴더가 있습니다
values
values-11
values-14
이 세 가지 서로 다른 플랫폼의 sdk 버전에 대응하는 양식은android 개발에서 호환되는 문제에 대해'최신api를 최신androidsdk에서 실행시켜야 한다'는 것은 매우 좋은 행위이다.
values 파일은 주로 테마 스타일을 설정하는 데 사용되며 권한은 플랫폼에 따라 세분화된다. 즉android4.x는values-14를먼저찾고values-11을찾고마지막으로values,android2.x 처음에values-11 마지막에values 찾기
이상은values의 설정 문제입니다. 일반적으로 스타일입니다.xml은 일반적으로 window와activity 테마와 스타일을 설정하는 데 사용되지만, 실제로는 스타일입니다.xml도 컨트롤의 전역 스타일을 설정할 수 있습니다.
다음은 명언이 있다.
가능한 한 주제 양식과 페이지 풍격을 통일시키고 알록달록한 것이 가장 못생긴 풍격이다.
예를 들다
style.xml-1
<style name="text_red_20_blod">
<item name="android:textStyle">bold</item>
<item name="android:textSize">20.0sp</item>
<item name="android:textColor">@color/red_text_color</item>
</style>
이러한 한계성은 레이아웃 파일에 직접 설정한 것과 마찬가지로 많은 코드가 적고 중용성을 높였으며 일부 전역화만 했다고 할 수 있다.
style.xml-2
<style name="AppTheme" parent="android:Theme.Holo.Light">
<item name="android:textStyle">bold</item>
<item name="android:textSize">20.0sp</item>
<item name="android:textColor">@color/red_text_color</item>
</style>
이런 일은 가장 전반적인 것이고 중용성을 높였다. 물론 그의 결점도 있다. 이 점은 피할 수 없다. 그러면 개발 과정에서 우리는 어떻게 선택할 것인가?
둘.사용자 정의 Attr 스타일 스타일 및 읽기
사용자 정의 속성을 가져오는 것은 일반적으로 사용자 정의 View 내부에서 가져오지만, 어떤 방식으로든 사용자 정의 View의 속성이든 테마의 스타일의 속성이든 외부 스타일에서 가져올 수 있습니다.
사용자 정의 뷰가 아닌 외부 가져오기 방식이 복잡하기 때문에 잠시 생략하고 나중에 보충합니다.
1. attr 사용자 정의
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<attr name="theme_name" format="string|reference"/>
</resources>
2. attr를 설정합니다. 이 Attr는 일반적인 스타일이 아닌 Activity 테마에 있어야 합니다.
<resources>
<!-- Activity themes -->
<style name="Theme.Base" parent="android:Theme.Holo.Light" >
<item name="theme_name" >@string/theme_name_1</item>
</style>
</resources>
3. 획득, xml 통과
<TextView
android:id="@+id/show_tv"
android:layout_width="match_parent"
android:layout_height="200dip"
android:text="?attr/theme_name"
android:background="@android:color/darker_gray" />
4. 획득, 코드 통과
TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,outValue, true);
textView.setBackgroundResource(outValue.resourceId);
데이터를 직접 설정하면 resourceId가 0입니다.
<resources>
<!-- Activity themes -->
<style name="Theme.Base" parent="android:Theme.Holo.Light" >
<item name="theme_name" > </item>
</style>
</resources>
이때 우리의 데이터는 TypeValue를 사용할 수 있다.string 읽기
TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,outValue, true);
if(outValue.data==TypeValue.TYPE_STRING)
{
textView.setBackgroundResource(outValue.string);
}
5. 물론, 때로는 우리의 속성이 집합일 수도 있다
이때는 TypedValue로 얻을 수 없고 TypeValued는 유형만 판단할 수 있기 때문에 다음과 같은 방식을 선택합니다
5.1 xml에서 우리는 스타일 = "?attr/MyStyle"또는 스타일 = "?android:attr/actionBarStyle"방식으로 집합 스타일의
5.2 코드에서 다음과 같이 밤을 가져옵니다.
public int getTabContainerHeight()
{
TypedArray a = mContext.obtainStyledAttributes(null, android.support.v7.appcompat.R.styleable.ActionBar, android.support.v7.appcompat.R.attr.actionBarStyle, 0);
int height = a.getLayoutDimension(android.support.v7.appcompat.R.styleable.ActionBar_height, 0);
Resources r = mContext.getResources();
if(!hasEmbeddedTabs())
height = Math.min(height, r.getDimensionPixelSize(android.support.v7.appcompat.R.dimen.abc_action_bar_stacked_max_height));
a.recycle();
return height;
}
View 내부 검색 방법은 다음과 같습니다.
private static Context themifyContext(Context context, AttributeSet attrs, int defStyleAttr)
{
TypedArray a = context.obtainStyledAttributes(attrs, android.support.v7.appcompat.R.styleable.Toolbar, android.support.v7.appcompat.R.attr.ActionBarStyle, 0);
int themeId = a.getResourceId(android.support.v7.appcompat.R.styleable.Toolbar_theme, 0);
if(themeId != 0)
context = new ContextThemeWrapper(context, themeId);
a.recycle();
return context;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Android 앱 개발】 전체 화면을 표시하는 방법 (알림 표시 줄 숨기기)Android 앱을 전체 화면으로 표시하고 싶지만 프로젝트 초기 설정 (Activity)에서 "Empty Activity"를 선택해도 통지 바가 표시되므로, 이번은 이 통지 바 주위의 설정을 정리해 기술하고 싶습니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.