Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android appcompat-v7:22.0.0以编程方式创建UI时的主题问题_Android_Android Appcompat - Fatal编程技术网

Android appcompat-v7:22.0.0以编程方式创建UI时的主题问题

Android appcompat-v7:22.0.0以编程方式创建UI时的主题问题,android,android-appcompat,Android,Android Appcompat,更新到appcompat-v7:22后,我遇到了严重的主题问题。appcompat-v7:21没有出现下面描述的问题 我有一个静态添加片段的活动。片段视图仅以编程方式创建(没有扩展布局)。最终的活动视图包含两个按钮:一个直接在活动布局中创建,另一个通过片段以编程方式添加第二个按钮应与第一个按钮相似,因为没有指定自定义样式或属性值: 应用程序主题扩展了theme.AppCompat.NoActionBar 活动布局: 我在这里将此问题与新项目分开: 这是一个错误还是我遗漏了什么? 是否有可能为

更新到appcompat-v7:22后,我遇到了严重的主题问题。appcompat-v7:21没有出现下面描述的问题

我有一个静态添加片段的活动。片段视图仅以编程方式创建(没有扩展布局)。最终的活动视图包含两个按钮:一个直接在活动布局中创建,另一个通过片段以编程方式添加第二个按钮应与第一个按钮相似,因为没有指定自定义样式或属性值:

应用程序主题扩展了
theme.AppCompat.NoActionBar

活动布局:

我在这里将此问题与新项目分开:

这是一个错误还是我遗漏了什么? 是否有可能为此制定一个解决方案

编辑


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

据我所知,v21不支持根据材料指南自动设置按钮样式。我假设现在运行时创建的按钮没有样式,这可能被认为是一个bug

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


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

这个问题是在4月22日用appcompat rev 22.1修复的。现在,您可以使用普通按钮或新的AppCompatButton

有趣的是,布局中的小部件膨胀为视图层次结构中的TintButton。将代码中的按钮更改为TintButton可修复此问题。谢谢,所以,这不是一个bug,它是一个特性:)我不知道是否应该使用
internal
东西。您可以尝试在运行时添加一个
编辑文本
复选框
,而不是
按钮
,或者在v21中已经着色的其他小部件。它们也有适当的着色类。除了在生产代码中使用它,我还研究了这个特性。现在我明白多了,谢谢!它在生产代码中工作吗?不,我们还没有将其投入生产。只要TintButton是暴露的,它就可以工作,但这不能保证在新的SDK版本中保持不变。抱歉,但我不理解你的解决方案:我有同样的问题,如果我想更改按钮颜色(对于Android KitKat和棒棒糖),保持连锁反应,我必须做什么?这不在这个问题的范围之内。请看:@jskierbity,这个链接很有用!
<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;
    }
}