在5.0

时间:2015-04-30 23:19:28

标签: android xml android-layout android-fragments

我正在尝试检索我为片段定义的自定义属性的值。我的问题是,当TypedArray.getInteger()访问时,自定义属性的返回值始终为0而不是布局文件中设置的值 - 但仅限于运行5.0的设备。

引用一些我发现有助于解决我的问题的资源:Google's FragmentArgument演示用于获取自定义样式属性,this stackoverflow post已在其他一些有关获取的stackoverflow问题上引用Android片段的自定义属性和this article

使用这些资源,我已成功为运行api 16-19的设备上的片段设置了自定义属性,但在运行Android L的设备上没有。

代码段:

RES /值/ attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="ComposerFragment">
        <attr name="position" format="enum">
            <enum name="left" value="1"/>
            <enum name="right" value="2"/>
        </attr>
    </declare-styleable>
</resources>

composer_activity.xml (布局文件)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <!-- other views elided -->

    <fragment
        android:name="com.mypackage.name.ui.fragment.ComposerFragment"
        android:id="@+id/left_composer"
        <!-- layout attributes elided -->
        app:position="left">
        <requestFocus/>
    </fragment>

    <fragment
        android:name="com.mypackage.name.ui.fragment.ComposerFragment"
        android:id="@+id/right_composer"
        <!-- layout attributes elided -->
        app:position="right"
     />
</RelativeLayout>

ComposerFragment.java (扩展支持片段)

@Override
public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
    super.onInflate(activity, attrs, savedInstanceState);
    TypedArray a = activity.obtainStyledAttributes(attrs, R.styleable.ComposerFragment);
    mBackgroundScrollerPosition =
            a.getInteger(R.styleable.ComposerFragment_position, Position.NOT_SPECIFIED);  // Position.NOT_SPECIFIED == 0
    a.recycle();
}

我在attrs.xml中尝试了<attr name="position" format="integer">,只在布局xml中设置app:position="1",但a.getInteger(R.styleable.ComposerFragment_position, Position.NOT_SPECIFIED);中返回的值始终为0 - 在运行5.0的设备上。

如前所述,我的方法适用于运行JellyBean和KitKat的设备。

0 个答案:

没有答案