Android Studio Vector Assets工具将矢量drawable转换为PNG-s用于Lollipop之前的设备,但是我得到了质量非常差的PNG-s,你可以在这里看到:
更重要的是,按钮的背景纯色应该是您在左侧看到的浅绿色,但是可绘制的覆盖它:
<item android:state_checked="true"
android:drawable="@drawable/show">
<shape android:shape="rectangle">
<corners android:bottomRightRadius="8dp"/>
<solid android:color="@color/waveComponentGreen"/>
</shape>
</item>
<item android:state_checked="false"
android:drawable="@drawable/hide">
<shape android:shape="rectangle">
<corners android:bottomRightRadius="8dp"/>
<solid android:color="@color/waveComponentGreen"/>
</shape>
</item>
Run Code Online (Sandbox Code Playgroud)
drawable的xml是(材质图标的默认值):
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/>
Run Code Online (Sandbox Code Playgroud)
我还希望通过调整值使图标显得更小,我注意到增加视口尺寸会减小图标,但我不确定我理解为什么.
那么:如何使图标和生成的PNG看起来更小,更少模糊,并在资源文件中设置背景颜色?谢谢.
编辑:我通过将它们组合在一个带有图层列表的单独xml文件中,设法获得带有图标的纯色背景:
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<corners android:bottomRightRadius="10dp"/>
<solid android:color="@color/waveComponentGreen"/>
</shape>
</item>
<item android:drawable="@drawable/show"
android:top="10dp"
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
/>
Run Code Online (Sandbox Code Playgroud)
结果是:
我设法通过增加矢量drawable的宽度和高度来减少模糊.但是,如果没有android:top|bottom|left|right标签,则可拉伸的按钮会拉伸整个按钮区域.第二个按钮不需要具有背景纯色,因此我没有使用layer-list标签=>无法top|bottom|left|right为drawable 设置边距.
如果我减小按钮大小,我正在做的是减少按钮的可点击区域.
我更新的问题是如何设置按钮/切换按钮/单选按钮内的矢量可绘制的大小而不减小按钮本身的大小?
更新
我无法找到一种方法来调整API 21之前的设备上的矢量可绘制的大小.因此,我将按钮本身缩小,增加了每个按钮的触摸区域.
我有一个带有几个片段的应用程序和一个管理它们的活动.为了避免片段之间的耦合,所有交互和更改都会通过活动 - 但这是我的问题 - 我在以下场景中得到循环继承编译时错误:
简而言之:
class A extends Z implements B.listenerB, C.listenerC // cyclic inheritance involving A
class B extends Y implements A.listenerA //cyclic inheritance involving B
class C extends Y implements A.listenerA // cyclic inheritance involving A
Run Code Online (Sandbox Code Playgroud)
长:
public class Fragment1 extends Fragment implements Activity1.onCustomEventListenerActivity {
onCustomEventListenerFrag1 listener1;
public interface onCustomEventListenerFrag1{
void onCustomEventinFrag1();
}
public void someAction(){
if (successful)
listener1.onCustomEvent(); //notify the activity of success
}
@Override
public void onCustomEvent(){
//respond to change from activity
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的示例活动: …