更新到appcompat-v7:22后,我遇到了主题方面的严重问题。 appcompat-v7:21不会发生以下问题

我有一个静态添加的片段的活动。片段视图只能通过编程方式创建(不会夸大布局)。最终活动视图包含2个按钮:一个直接在“活动”布局中创建,第二个通过Fragment编程添加。第二个按钮应该看起来像第一个按钮,因为未分配自定义样式或属性值:



应用程序主题扩展Theme.AppCompat.NoActionBar

活动布局:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:text="Super Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <fragment
        android:id="@+id/myfragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.jskierbi.appcompat22test.MainFragment" />

</LinearLayout>


片段类:


public class MainFragment extends Fragment {

    @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        LinearLayout layout = new LinearLayout(getActivity());
        layout.setOrientation(LinearLayout.VERTICAL);
        Button btn = new Button(getActivity());
        btn.setText("Click me!");
        layout.addView(btn);
        return layout;
    }
}


我已将此问题分离到此处的新项目:https://github.com/jskierbi/appcompat-v7-22-bug

这是错误还是我错过了什么?
是否可以为此解决办法?

编辑

这不是错误。在布局中定义的<Button>小部件会在视图层次结构中膨胀为TintButton对象。可能的解决方法是在代码中创建TintButton而不是Button。警告TintButton位于内部包装内,因此不应在生产代码中使用。

最佳答案

据我所知,v21不支持使用材料准则自动设置按钮样式。我假设现在在运行时创建的按钮未设置样式,是的,可能被认为是错误。

我想到的可能的解决方法(现在无法测试)正在调用,而不是new Button()new TintButton(),其中TintButton是支持库中定义的类,假定是材料样式版本的Button

我认为应该是android.support.v7.internal.widget.TintButton

关于android - 以编程方式创建UI时出现appcompat-v7:22.0.0主题问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29323804/

10-12 04:26