我发现了CardView阴影的非常奇怪的行为。 我刚开始开发一个应用程序,并且绝对没有任何业务逻辑或类似的东西。但无论如何......
我只是为我的片段布局添加了一些视图,并发现,在每个屏幕旋转后,cardview的阴影变暗。 旋转5-6次后它看起来已经完全变黑了。我猜,问题可以在画布的某个地方,但不知道在哪里和为什么 - 我甚至没有开始定制任何东西。 我希望有人已经用cardview解决了类似的问题,现在可以分享这种体验了。
谢谢!
以下是截图,代码,依赖关系和xml:
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:iot="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/common_gap"
iot:cardElevation="10dp"
iot:cardUseCompatPadding="true">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<DatePicker
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/common_gap"
android:calendarViewShown="true"
android:spinnersShown="false" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingLeft="@dimen/common_gap"
android:paddingRight="@dimen/common_gap"
android:text="@string/choose_date_confirm_button"
android:textColor="@color/colorPrimary" />
</LinearLayout>
</ScrollView>
</android.support.v7.widget.CardView>
</LinearLayout>
Java (片段类中没有其他内容)
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.date_choose_fragment, container, false);
return rootView;
}
依赖关系
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.android.support:cardview-v7:25.0.1'
答案 0 :(得分:4)
这很可能不是由于CardView
或其阴影抽奖的任何错误造成的。相反,这可能是多个Fragment
s具有透明背景,一个堆叠在另一个上面,而变暗阴影是阴影的附加效果的结果。透光性。
Fragment
时会自动重新创建活动Activity
个实例,默认情况下会在更改方向时发生。如果您无条件地添加动态Fragment
实例,例如,在Activity
的{{1}}方法中,那么该实例将与从中重新创建的任何实例一起添加onCreate()
的先前状态。实际上,每次旋转设备时,您都会向堆栈添加一个Activity
,阴影会变得更暗。
只需简单Fragment
就可以证明这一点,以表明它不是TextView
特有的问题。
CardView
fragment.xml
在示例<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Hello world!"
android:textSize="60sp"
android:textStyle="bold"
android:textColor="#fffbc02d"
android:shadowColor="#70707070"
android:shadowDx="10"
android:shadowDy="10"
android:shadowRadius="10" />
&#39; Activity
方法中,我们添加了一个动态创建的onCreate()
,其中包含给定的布局,如上所述。
Fragment
此图像显示旋转设备后的连续捕获,每个步骤两次。
如果要在public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.add(android.R.id.content, new MainFragment()).commit();
}
public static class MainFragment extends Fragment {
public MainFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, container, false);
}
}
}
Fragment
方法中打印日志,您会看到每次轮换时都会创建一个附加实例。在该序列的最后,我们有11个onCreateView()
在玩。
阻止这种情况的一种方法是在创建和添加新Fragment
之前检查Fragment
是否已附加到FragmentManager
,我们可以通过在{{1}中添加标记来执行此操作}。例如:
FragmentTransaction
或者,如果您不需要在启动后动态处理if (getFragmentManager().findFragmentByTag("main") == null) {
getFragmentManager().beginTransaction()
.add(android.R.id.content, new MainFragment(), "main").commit();
}
,则可以在布局中静态定义它,Fragment
将处理检查和事务本身。
FragmentManager