我正在使用图标样本设计按钮,并希望在未按下图标时,它是黑色,按下时变为白色。编码如下:
布局xml中的<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1"
android:background="@drawable/icon_new_btn"
android:scaleType="fitXY"
android:id="@+id/newBtn" />
icon_new_btn.xml中的<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:drawableTop="@drawable/icon_new_white"
android:background="@android:color/transparent"/>>
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:drawableTop="@drawable/icon_new"
android:background="@android:color/transparent"/>
</shape>
</item>
</selector>
整个按钮在屏幕上变得不可见(它仍然可以在该屏幕位置按下!)。我如何修改上述编码以满足定义的目的?谢谢!
以下修改后的布局和选择器似乎正在解决上述问题1.然而,分辨率变得更差,图标失真并且看起来更大。请使用以下修改后的代码查看以下屏幕截图中的第一个和第二个图标(图标3到6只是使用android:drawableTop="@drawable/icon_save"
而没有任何按下效果并显示更高的分辨率):
<Button
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1"
android:background="@drawable/icon_new_btn"
android:scaleType="fitXY"
android:id="@+id/newBtn" />
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_new_white"
android:state_pressed="true" />
<item android:drawable="@drawable/icon_new" />
</selector>
答案 0 :(得分:1)
图形被分散的原因是因为它被设置为背景。要解决此问题,您可以使用ImageButton
:
<ImageButton
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_weight="1"
android:src="@drawable/icon_new_btn"
android:background="@null"
android:id="@+id/newBtn" />
此外,您已指定android:scaleType="fitXY"
。您可能需要android:scaleType="centerInside"
。
答案 1 :(得分:0)
您好,我正在为您发布答案。 在res / layout中创建4个xml文件。
state.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Button Focused-->
<item android:state_focused="true"
android:state_pressed="false"
android:drawable="@layout/state1"
/>
<!-- Button Focused Pressed-->
<item android:state_focused="true"
android:state_pressed="true"
android:drawable="@layout/state1"
/>
<!-- Button Pressed-->
<item android:state_focused="false"
android:state_pressed="true"
android:drawable="@layout/state1"
/>
<!-- Button Default Image-->
<item android:drawable="@layout/state2"/>
</selector>
state1.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" shape="rectangle">
<!--this is to give gradient effect -->
<gradient android:angle="270"
android:startColor="#6b6b6b"
android:endColor="#0e0e0e"
/>
<!-- this is make corners of button rounded -->
<corners android:topLeftRadius="5dip"
android:bottomRightRadius="5dip"
android:topRightRadius="5dip"
android:bottomLeftRadius="5dip"/>
</shape>
state2.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" shape="rectangle">
<!--this is to give gradient effect -->
<gradient android:angle="270"
android:startColor="#e7ff47"
android:endColor="#90a501"
/>
<!-- this is make corners of button rounded -->
<corners android:topLeftRadius="5dip"
android:bottomRightRadius="5dip"
android:topRightRadius="5dip"
android:bottomLeftRadius="5dip"/>
</shape>
在activity_main.xml
中<RelativeLayout 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" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="183dp"
android:text="Click Here To Change Color"
android:background="@layout/state"/>
</RelativeLayout>
Java文件 MainActivity.java
package com.example.getimage;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
那些都喜欢编码:)