在Android应用程序中覆盖库中的资源

时间:2016-08-20 16:12:01

标签: android android-resources

我开始使用这个库:https://github.com/MrBIMC/MaterialSeekBarPreference。当我使用它时,我发现滑块很小。我发现它使用msbp_seekbar_width属性:

   <SeekBar
        android:id="@+id/seekbar"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_width="@dimen/msbp_seekbar_width"
        android:layout_height="wrap_content" />

所以我试着在我的应用中覆盖它。我有nexus 5x,它应该是xxhdpi和730 dpi宽:https://design.google.com/devices/。我把

<dimen name="msbp_seekbar_width">700dp</dimen>
以下限定符目录中的dimens.xml中的

值:valuesw720dpixxhdpi。但它没有效果。是否可以从库中覆盖资源?

1 个答案:

答案 0 :(得分:1)

因为lib不依赖于你的项目 ..尝试将已使用的类从该lib(如果可能)扩展到你的项目并再次重用..这将允许你使用资源来自Lib和您项目中的资源。 所以SeekBar会像

一样
<com.mycompany.myapp.widget.SeekBar
..
        android:id="@+id/seekbar"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_width="@dimen/msbp_seekbar_width"
        android:layout_height="wrap_content" />

<强>扩展中心: 如果这不起作用..您可以将布局:R.layout.seekbar_view_layout复制到您的项目中,并确保覆盖其使用的方法:

我不知道你要瞄准哪一个..所以我列出所有:

对于SeekBarPreferenceView.java:

 @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        View view = inflate(getContext(), R.layout.seekbar_view_layout, this);
        controllerDelegate.onBind(view);
    }

对于SeekBarPreference.java:

private void init(AttributeSet attrs) {
        setLayoutResource(R.layout.seekbar_view_layout);
        controllerDelegate = new PreferenceControllerDelegate(getContext(), false);

        controllerDelegate.setViewStateListener(this);
        controllerDelegate.setPersistValueListener(this);
        controllerDelegate.setChangeValueListener(this);

        controllerDelegate.loadValuesFromXml(attrs);
    }

对于SeekBarPreferenceCompat.java:

 private void init(AttributeSet attrs) {
        setLayoutResource(R.layout.seekbar_view_layout);
        controllerDelegate = new PreferenceControllerDelegate(getContext(), false);

        controllerDelegate.setViewStateListener(this);
        controllerDelegate.setPersistValueListener(this);
        controllerDelegate.setChangeValueListener(this);

        controllerDelegate.loadValuesFromXml(attrs);
    }