android使用自定義屬性
A. android開發scaletype自定義屬性中怎麼寫
ImageView.ScaleType.CENTER|android:scaleType="center" 以原圖的幾何中心點和ImagView的幾何中心點為基準,按圖片的原來size居中顯示,不縮放,當圖片長/寬超過View的長/寬,則截取圖片的居中部分顯示ImageView的size.當圖片小於View 的長寬時,只顯示圖片的size,不剪裁。
 
ImageView.ScaleType.CENTER_CROP|android:scaleType="centerCrop" 以原圖的幾何中心點和ImagView的幾何中心點為基準,按比例擴大(圖片小於View的寬時)圖片的size居中顯示,使得圖片長 (寬)等於或大於View的長(寬),並按View的大小截取圖片。當原圖的size大於ImageView時,按比例縮小圖片,使得長寬中有一向等於ImageView,另一向大於ImageView。實際上,使得原圖的size大於等於ImageView
 
ImageView.ScaleType.CENTER_INSIDE|android:scaleType="centerInside" 以原圖的幾何中心點和ImagView的幾何中心點為基準,將圖片的內容完整居中顯示,通過按比例縮小原來的size使得圖片長(寬)等於或小於ImageView的長(寬)
 
ImageView.ScaleType.FIT_CENTER|android:scaleType="fitCenter" 把圖片按比例擴大(縮小)到View的寬度,居中顯示
 
ImageView.ScaleType.FIT_END|android:scaleType="fitEnd" 把圖片按比例擴大(縮小)到View的寬度,顯示在View的下部分位置
 
ImageView.ScaleType.FIT_START|android:scaleType="fitStart" 把圖片按比例擴大(縮小)到View的寬度,顯示在View的上部分位置
 
ImageView.ScaleType.FIT_XY|android:scaleType="fitXY" 把圖片按照指定的大小在View中顯示,拉伸顯示圖片,不保持原比例,填滿View.
 
ImageView.ScaleType.MATRIX|android:scaleType="matrix" 用matrix來繪制
依本人之見,scaletype的種類分為三類matrix(默認)、fit-X類、和center類。matrix就不多說。fit-X類中,
fitStart、fitCenter和fitEnd之間的都是根據需要使原圖改變對ImgView進行適應,不剪裁,按matrix進行繪制,但它們
的區別在於基準不同。fitStart的基準為最上角的點(即matrix方式開始的點)fitCenter的基準點為中間的點
(matrix方式中可以使圖片居中的點),而fitEnd的基準點為右下角的點(即matrix方式最後繪制點)。center類
中,center、centerCrop、centerInside都是以原圖的幾何中心點和ImagView的幾何中心點為基準,且只繪制
ImagView大小的圖像,不同的是是否保持原圖大小和繪圖的目標不同、採取的手段不同
B. android中自定義屬性是color怎麼定義
<item name="android:textAppearance">?android:attr/textAppearance</item> <item name="android:textStyle">normal</item> <item name="android:textColor">#FFFFFFFF</item> <item name="android:textSize">16dp</item> <item name="android:windowEnterAnimation">@*android:anim/grow_fade_in_from_bottom</item> <item name="android:windowExitAnimation">@*android:anim/shrink_fade_out_from_bottom</item> <item name="android:fontFamily">sans-serif-light</item> <item name="android:textAllCaps">true</item> 這些是在4.1系統源碼下的UI裡面的Style.xml中的一些,支持 普通的屬性,信息不全,要全部的那些我估摸著這里容不下。 可以自定義屬性。
C. android怎麼動態獲取自定義屬性
運行時許可權處理
Android6.0系統默認為targetSdkVersion小於23的應用默認授予了所申請的所有許可權,所以如果你以前的APP設置的targetSdkVersion低於23,在運行時也不會崩潰,但這也只是一個臨時的救急策略,用戶還是可以在設置中取消授予的許可權。
聲明目標SDK版本
我們需要在build.gradle中聲明targetSdkVersion為23
android {
 compileSdkVersion 23
 buildToolsVersion "23.0.1"
 defaultConfig {
     applicationId "com.yourcomany.app
     minSdkVersion 18
     targetSdkVersion 23
     versionCode 1
     versionName "1.0"
 }
 buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
檢查並申請許可權
我們需要在用到許可權的地方,每次都檢查是否APP已經擁有許可權,比如我們有一個下載功能,需要寫SD卡的許可權,我們在寫入之前檢查是否有WRITE_EXTERNAL_STORAGE許可權,沒有則申請許可權
     if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
              != PackageManager.PERMISSION_GRANTED) {
          //申請WRITE_EXTERNAL_STORAGE許可權
          ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                  WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
      }
請求許可權後,系統會彈出請求許可權的Dialog
用戶選擇允許或需要後,會回調onRequestPermissionsResult方法, 該方法類似於onActivityResult
 @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
      super.onRequestPermissionsResult(requestCode, permissions, grantResults);
      doNext(requestCode,grantResults);
  }
我們接著需要根據requestCode和grantResults(授權結果)做相應的後續處理
private void doNext(int requestCode, int[] grantResults) {
      if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
          if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
              // Permission Granted
          } else {
              // Permission Denied
          }
      }
  }
Fragment中運行時許可權的特殊處理
在Fragment中申請許可權,不要使用ActivityCompat.requestPermissions, 直接使用Fragment的requestPermissions方法,否則會回調到Activity的 onRequestPermissionsResult
如果在Fragment中嵌套Fragment,在子Fragment中使用requestPermissions方 法,onRequestPermissionsResult不會回調回來,建議使用 getParentFragment().requestPermissions方法,這個方法會回調到父Fragment中的onRequestPermissionsResult,加入以下代碼可以把回調透傳到子Fragment
 @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
      super.onRequestPermissionsResult(requestCode, permissions, grantResults);
      List<Fragment> fragments = getChildFragmentManager().getFragments();
      if (fragments != null) {
          for (Fragment fragment : fragments) {
              if (fragment != null) {
                  fragment.onRequestPermissionsResult(requestCode,permissions,grantResults);
              }
          }
      }
  }
相關開源項目
PermissionsDispatcher
使用標注的方式,動態生成類處理運行時許可權,目前還不支持嵌套Fragment。
RxPermissions
基於Rxjava的運行時許可權檢測框架
Grant
簡化運行時許可權的處理,比較靈活
android-RuntimePermissions
Google官方的例子
附錄
以下許可權只需要在AndroidManifest.xml中聲明即可使用
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT
D. android 自定義屬性visibility怎麼設置
visibility不是自定義的,有這個屬性,gone是隱藏。
E. Android自定義view自定義屬性怎麼使用,請牛人指導
首先定義一下自定義屬性,一種好的習慣是自定義的屬性集合的名字要和使用這些屬性的自定義View的類名一致,當然, 這個也不是必須的, 比如如下的屬性集合, 也可以用在OtherCustomeView里。
<declare-styleablename="DrawableTextView">
<attrname="drawableHeight"format="dimension"/>
<attrname="drawableWidth"format="dimension"/>
</declare-styleable>
布局文件中定義DrawableTextView的時候, 就可以使用定義好的自定義屬性了,如app:開頭的屬性。
<com.shwy.bestjoy.view.DrawableTextView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/model_my_customer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/defaultBlueButtonColor"
android:textSize="22sp"
android:text="@string/model_my_customer"
android:gravity="center_vertical"
android:drawableLeft="@drawable/model_my_customer_icon"
android:drawablePadding="10dip"
app:drawableHeight="45dip"
app:drawableWidth="45dip"/>
在DrawableTextView.java類里讀出屬性值
publicDrawableTextView(Contextcontext,AttributeSetattrs){
super(context,attrs);
TypedArraytypedArray=context.obtainStyledAttributes(attrs,R.styleable.DrawableTextView);
//圖片的高度
mDrawableHeight=typedArray.getDimensionPixelSize(R.styleable.DrawableTextView_drawableHeight,0);
mDrawableWidth=typedArray.getDimensionPixelSize(R.styleable.DrawableTextView_drawableWidth,0);
typedArray.recycle();
}
F. android 系統屬性怎麼定義
對於自定義屬性,大家肯定都不陌生,遵循以下幾步,就可以實現:
自定義一個CustomView(extends View )類
編寫values/attrs.xml,在其中編寫styleable和item等標簽元素
在布局文件中CustomView使用自定義的屬性(注意namespace)
在CustomView的構造方法中通過TypedArray獲取
ps:如果你對上述幾個步驟不熟悉,建議先熟悉下,再繼續~
那麼,我有幾個問題:
以上步驟是如何奏效的?
styleable 的含義是什麼?可以不寫嘛?我自定義屬性,我聲明屬性就好了,為什麼一定要寫個styleable呢?
如果系統中已經有了語義比較明確的屬性,我可以直接使用嘛?
構造方法中的有個參數叫做AttributeSet 
(eg: MyTextView(Context context, AttributeSet attrs) )這個參數看名字就知道包含的是參數的數組,那麼我能不能通過它去獲取我的自定義屬性呢?
TypedArray是什麼鬼?從哪冒出來的,就要我去使用?
恩,針對這幾個問題,大家可以考慮下,如何回答呢?還是說:老子會背上述4個步驟就夠了~~
2、常見的例子
接下來通過例子來回答上述問題,問題的回答順序不定~~大家先看一個常見的例子,即上述幾個步驟的代碼化。
G. android自定義控制項怎麼用
一、控制項自定義屬性介紹 
以下示例中代碼均在values/attrs.xml 中定義,屬性均可隨意命名。 
1. reference:參考某一資源ID。 
示例: 
<declare-styleable name = "名稱"> 
<attr name = "background" format = "reference" /> 
<attr name = "src" format = "reference" /> 
</declare-styleable> 
2. color:顏色值。 
示例: 
<declare-styleable name = "名稱"> 
<attr name = "textColor" format = "color" /> 
</declare-styleable> 
3. boolean:布爾值。 
示例: 
<declare-styleable name = "名稱"> 
<attr name = "focusable" format = "boolean" /> 
</declare-styleable> 
4. dimension:尺寸值。 
示例: 
<declare-styleable name = "名稱"> 
<attr name = "layout_width" format = "dimension" /> 
</declare-styleable> 
5. float:浮點值。 
示例: 
<declare-styleable name = "名稱"> 
<attr name = "fromAlpha" format = "float" /> 
<attr name = "toAlpha" format = "float" /> 
</declare-styleable> 
6. integer:整型值。 
示例: 
<declare-styleable name = "名稱"> 
<attr name = "frameDuration" format="integer" /> 
<attr name = "framesCount" format="integer" /> 
</declare-styleable> 
7. string:字元串。 
示例: 
<declare-styleable name = "名稱"> 
<attr name = "text" format = "string" /> 
</declare-styleable> 
8. fraction:百分數。 
示例: 
<declare-styleable name="名稱"> 
<attr name = "pivotX" format = "fraction" /> 
<attr name = "pivotY" format = "fraction" /> 
</declare-styleable> 
9. enum:枚舉值。 
示例: 
<declare-styleable name="名稱"> 
<attr name="orientation"> 
<enum name="horizontal" value="0" /> 
<enum name="vertical" value="1" /> 
</attr> 
</declare-styleable> 
10. flag:位或運算。 
示例: 
<declare-styleable name="名稱"> 
<attr name="windowSoftInputMode"> 
<flag name = "stateUnspecified" value = "0" /> 
<flag name = "stateUnchanged" value = "1" /> 
<flag name = "stateHidden" value = "2" /> 
<flag name = "stateAlwaysHidden" value = "3" /> 
</attr> 
</declare-styleable> 
11.多類型。 
示例: 
<declare-styleable name = "名稱"> 
<attr name = "background" format = "reference|color" /> 
</declare-styleable> 
二、屬性的使用以及自定義控制項的實現 
1、構思控制項的組成元素,思考所需自定義的屬性。 
比如:我要做一個 <帶陰影的按鈕,按鈕正下方有文字說明>(類似9宮格按鈕) 
新建values/attrs.xml 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<declare-styleable name="custom_view"> 
<attr name="custom_id" format="integer" /> 
<attr name="src" format="reference" /> 
<attr name="background" format="reference" /> 
<attr name="text" format="string" /> 
<attr name="textColor" format="color" /> 
<attr name="textSize" format="dimension" /> 
</declare-styleable> 
</resources> 
以上,所定義為custom_view,custom_id為按鈕id,src為按鈕,background為陰影背景,text為按鈕說明,textColor為字體顏色,textSize為字體大小。
  
2、怎麼自定義控制項呢,怎麼使用這些屬性呢?話不多說請看代碼,CustomView : 
package com.nanlus.custom; 
import com.nanlus.custom.R; 
import android.content.Context; 
import android.content.res.TypedArray; 
import android.graphics.Color; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.view.Gravity; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.FrameLayout; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.TextView; 
public class CustomView extends FrameLayout implements OnClickListener { 
private CustomListener customListener = null; 
private Drawable mSrc = null, mBackground = null; 
private String mText = ""; 
private int mTextColor = 0; 
private float mTextSize = 20; 
private int mCustomId = 0; 
private ImageView mBackgroundView = null; 
private ImageButton mButtonView = null; 
private TextView mTextView = null; 
private LayoutParams mParams = null; 
public CustomView(Context context) { 
super(context); 
} 
public CustomView(Context context, AttributeSet attrs) { 
super(context, attrs); 
TypedArray a = context.obtainStyledAttributes(attrs, 
R.styleable.custom_view); 
mSrc = a.getDrawable(R.styleable.custom_view_src); 
mBackground = a.getDrawable(R.styleable.custom_view_background); 
mText = a.getString(R.styleable.custom_view_text); 
mTextColor = a.getColor(R.styleable.custom_view_textColor, 
Color.WHITE); 
mTextSize = a.getDimension(R.styleable.custom_view_textSize, 20); 
mCustomId = a.getInt(R.styleable.custom_view_custom_id, 0); 
mTextView = new TextView(context); 
mTextView.setTextSize(mTextSize); 
mTextView.setTextColor(mTextColor); 
mTextView.setText(mText); 
mTextView.setGravity(Gravity.CENTER); 
mTextView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
LayoutParams.WRAP_CONTENT)); 
mButtonView = new ImageButton(context); 
mButtonView.setImageDrawable(mSrc); 
mButtonView.setBackgroundDrawable(null); 
mButtonView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
LayoutParams.WRAP_CONTENT)); 
mButtonView.setOnClickListener(this); 
mBackgroundView = new ImageView(context); 
mBackgroundView.setImageDrawable(mBackground); 
mBackgroundView.setLayoutParams(new LayoutParams( 
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
addView(mBackgroundView); 
addView(mButtonView); 
addView(mTextView); 
this.setOnClickListener(this); 
a.recycle(); 
} 
@Override 
protected void onAttachedToWindow() { 
super.onAttachedToWindow(); 
mParams = (LayoutParams) mButtonView.getLayoutParams(); 
if (mParams != null) { 
mParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP; 
mButtonView.setLayoutParams(mParams); 
} 
mParams = (LayoutParams) mBackgroundView.getLayoutParams(); 
if (mParams != null) { 
mParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP; 
mBackgroundView.setLayoutParams(mParams); 
} 
mParams = (LayoutParams) mTextView.getLayoutParams(); 
if (mParams != null) { 
mParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; 
mTextView.setLayoutParams(mParams); 
} 
} 
public void setCustomListener(CustomListener l) { 
customListener = l; 
} 
@Override 
public void onClick(View v) { 
if (customListener != null) { 
customListener.onCuscomClick(v, mCustomId); 
} 
} 
public interface CustomListener { 
void onCuscomClick(View v, int custom_id); 
} 
} 
代碼很簡單,就不多說,下面來看看我們的CustomView是怎麼用的,請看: 
3、自定義控制項的使用 
話不多說,請看代碼,main.xml: 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:nanlus="http://schemas.android.com/apk/res/com.nanlus.custom" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_centerHorizontal="true" 
android:layout_centerVertical="true" 
android:orientation="horizontal" > 
<com.nanlus.custom.CustomView 
android:id="@+id/custom1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_weight="1" 
nanlus:background="@drawable/background" 
nanlus:custom_id="1" 
nanlus:src="@drawable/style_button" 
nanlus:text="按鈕1" > 
</com.nanlus.custom.CustomView> 
</LinearLayout> 
</RelativeLayout> 
在這里需要解釋一下, 
xmlns:nanlus="http://schemas.android.com/apk/res/com.nanlus.custom" 
nanlus為在xml中的前綴,com.nanlus.custom為包名 
4、在Activity中,直接上代碼 
package com.nanlus.custom; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.nanlus.BaseActivity; 
import com.nanlus.custom.R; 
import com.nanlus.custom.CustomView.CustomListener; 
public class CustomActivity extends BaseActivity implements CustomListener { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
((CustomView) this.findViewById(R.id.custom1)).setCustomListener(this); 
} 
@Override 
public void onCuscomClick(View v, int custom_id) { 
switch (custom_id) { 
case 1: 
Toast.makeText(this, "hello !!!", Toast.LENGTH_LONG).show(); 
break; 
default: 
break; 
} 
} 
}
H. android Dialog怎樣自定義屬性
自定義屬性都存在於/value/attr.xml文件中,可以去修改,格式如下:
    <resource>
        <declare-styleable name="自定義屬性名稱">
            <attr name="屬性名稱" format="屬性種類"/>
                ......
        </declare-styleable>
    </resource>
對於自定義屬性中的format的值及其含義如下:
format屬性值:reference 、color、boolean、dimension、float、integer、string、fraction、enum、flag
I. android 自定義屬性format有多個類型怎麼取
1. reference:參考某一資源ID。
(1)屬性定義:
<declare-styleable name = "名稱">
<attr name = "background" format = "reference" />
</declare-styleable>
(2)屬性使用:
<ImageView
android:layout_width = "42dip"
android:layout_height = "42dip"
android:background = "@drawable/圖片ID"
/>
2. color:顏色值。
(1)屬性定義:
<declare-styleable name = "名稱">
<attr name = "textColor" format = "color" />
</declare-styleable>
(2)屬性使用:
<TextView
android:layout_width = "42dip"
android:layout_height = "42dip"
android:textColor = "#00FF00"
/>
3. boolean:布爾值。
(1)屬性定義:
<declare-styleable name = "名稱">
<attr name = "focusable" format = "boolean" />
</declare-styleable>
(2)屬性使用:
<Button
android:layout_width = "42dip"
android:layout_height = "42dip"
android:focusable = "true"
/>
4. dimension:尺寸值。
(1)屬性定義:
<declare-styleable name = "名稱">
<attr name = "layout_width" format = "dimension" />
</declare-styleable>
(2)屬性使用:
<Button
android:layout_width = "42dip"
android:layout_height = "42dip"
/>
5. float:浮點值。
(1)屬性定義:
<declare-styleable name = "AlphaAnimation">
<attr name = "fromAlpha" format = "float" />
<attr name = "toAlpha" format = "float" />
</declare-styleable>
(2)屬性使用:
<alpha
android:fromAlpha = "1.0"
android:toAlpha = "0.7"
/>
6. integer:整型值。
(1)屬性定義:
<declare-styleable name = "AnimatedRotateDrawable">
<attr name = "visible" />
<attr name = "frameDuration" format="integer" />
<attr name = "framesCount" format="integer" />
<attr name = "pivotX" />
<attr name = "pivotY" />
<attr name = "drawable" />
</declare-styleable>
(2)屬性使用:
<animated-rotate
xmlns:android = "http://schemas.android.com/apk/res/android"
android:drawable = "@drawable/圖片ID"
android:pivotX = "50%"
android:pivotY = "50%"
android:framesCount = "12"
android:frameDuration = "100"
/>
7. string:字元串。
(1)屬性定義:
<declare-styleable name = "MapView">
<attr name = "apiKey" format = "string" />
</declare-styleable>
(2)屬性使用:
<com.google.android.maps.MapView
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:apiKey = "_bc_g"
/>
8. fraction:百分數。
(1)屬性定義:
<declare-styleable name="RotateDrawable">
<attr name = "visible" />
<attr name = "fromDegrees" format = "float" />
<attr name = "toDegrees" format = "float" />
<attr name = "pivotX" format = "fraction" />
<attr name = "pivotY" format = "fraction" />
<attr name = "drawable" />
</declare-styleable>
(2)屬性使用:
<rotate
xmlns:android = "http://schemas.android.com/apk/res/android"
android:interpolator = "@anim/動畫ID"
android:fromDegrees = "0"
android:toDegrees = "360"
android:pivotX = "200%"
android:pivotY = "300%"
android:ration = "5000"
android:repeatMode = "restart"
android:repeatCount = "infinite"
/>
9. enum:枚舉值。
(1)屬性定義:
<declare-styleable name="名稱">
<attr name="orientation">
<enum name="horizontal" value="0" />
<enum name="vertical" value="1" />
</attr>
</declare-styleable>
(2)屬性使用:
<LinearLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "vertical"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
>
</LinearLayout>
10. flag:位或運算。
(1)屬性定義:
<declare-styleable name="名稱">
<attr name="windowSoftInputMode">
<flag name = "stateUnspecified" value = "0" />
<flag name = "stateUnchanged" value = "1" />
<flag name = "stateHidden" value = "2" />
<flag name = "stateAlwaysHidden" value = "3" />
<flag name = "stateVisible" value = "4" />
<flag name = "stateAlwaysVisible" value = "5" />
<flag name = "adjustUnspecified" value = "0x00" />
<flag name = "adjustResize" value = "0x10" />
<flag name = "adjustPan" value = "0x20" />
<flag name = "adjustNothing" value = "0x30" />
</attr>
</declare-styleable>
(2)屬性使用:
<activity
android:name = ".StyleAndThemeActivity"
android:label = "@string/app_name"
android:windowSoftInputMode = "stateUnspecified | stateUnchanged|stateHidden">
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
注意:
屬性定義時可以指定多種類型值。
(1)屬性定義:
<declare-styleable name = "名稱">
<attr name = "background" format = "reference|color" />
</declare-styleable>
(2)屬性使用:
<ImageView
android:layout_width = "42dip"
android:layout_height = "42dip"
android:background = "@drawable/圖片ID|#00FF00"
/>
