如何实现一个不伸展的android:background?
我发现这个伟大的线程描述如何“吃蛋糕,也有它”,即使用图像的Button
而不是ImageButton
(它不允许SetText()
,resize等)。
这是通过使用View属性来实现的:
android:background="@drawable/bgimage"
唯一的问题是,它拉伸图像,以适应button的大小。
短的硬编码固定的button大小(以像素为单位),有没有办法告诉Android 不要拉伸的背景图像,不是裁剪或填充它?
如果你不想让它伸展,你应该使用ImageView 。 背景图像将始终伸展以适应视图。 您需要将其设置为Drawable来强制图像方面的对象。
否则,如果你坚持button的想法,那么你将需要强制button缩放,以防止图像拉伸。
比如在你的
OnCreate(Bundle bundle) { //set content layout, etc up here //now adjust button sizes Button B = (Button) findViewById(R.id.somebutton); int someDimension = 50; //50pixels B.setWidth(someDimension); B.setHeight(someDimension); }
您可以创build一个xml位图并将其用作视图的背景。 为了防止拉伸,您可以指定android:gravity
属性。
例如:
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/dvdr" android:tileMode="disabled" android:gravity="top" > </bitmap>
有很多选项可以用来自定义图像的渲染
http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap
简单地使用ImageButton
而不是Button
修复了这个问题。
<ImageButton android:layout_width="30dp" android:layout_height="30dp" android:src="@drawable/bgimage" />
你可以设置
android:background="@null"
如果你想要删除button背景。
快速解决 !! 🙂
我在一个RelativeLayout中使用一个ImageView,它与我的普通布局重叠。 没有要求的代码。 它将图像的大小设置为屏幕的全高(或任何其他使用的布局),然后将图像左右裁剪以适合宽度。 在我的情况下,如果用户转动屏幕,图片可能会太小。 因此,我使用match_parent,如果太小,会使图像的宽度拉伸。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/main_backgroundImage" android:layout_width="match_parent" //comment: Stretches picture in the width if too small. Use "wrap_content" does not stretch, but leaves space android:layout_height="match_parent" //in my case I always want the height filled android:layout_alignParentTop="true" android:scaleType="centerCrop" //will crop picture left and right, so it fits in height and keeps aspect ratio android:contentDescription="@string/image" android:src="@drawable/your_image" /> <LinearLayout android:id="@+id/main_root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout> </RelativeLayout>
我有同样的问题:你应该只使用9补丁图像(.9.png),而不是你的原始图片。
哔叽
使用Android Studio SDK工具中的draw9patch …。 您可以定义图像的可拉伸区域。 重要的部分是受限制的,图像看起来并不全是扭曲的。 这是一个关于dra9patch的好演示
使用draw9patch将您现有的splash.png更改为new_splash.9.png,将new_splash.9.png拖放到drawable-hdpi项目文件夹中,确保AndroidManifest和styles.xml是正确的,如下所示:
AndroidManifest.xml中:
<application ... android:theme="@style/splashScreenStyle" >
styles.xml:
<style name="splashScreenStyle" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:windowBackground">@drawable/new_splash</item> </style>
以下是Santosh为编程式创build的button的答案,不需要单独的XMLconfiguration:
Button button = new Button(getContext()); Bitmap backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_button); BitmapDrawable backgroundDrawable = new BitmapDrawable(getResources(), backgroundBitmap); backgroundDrawable.setGravity(Gravity.CENTER); // also LEFT, CENTER_VERTICAL, etc. backgroundDrawable.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP)); button.setBackground(backgroundDrawable);
我包括了ColorFilter线,因为它与具有正常背景图像的button有点不同。
我有一个背景图像,尺寸不大,但具有奇怪的尺寸 – 因此,拉伸和糟糕的performance。 我做了一个参数上下文,一个视图和一个可绘制的ID(int),将匹配设备的屏幕大小的方法。 在例如一个片段onCreateView中使用这个来设置背景。
public void setBackground(Context context, View view, int drawableId){ Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), drawableId); bitmap = Bitmap.createScaledBitmap(bitmap, Resources.getSystem().getDisplayMetrics() .widthPixels, Resources.getSystem().getDisplayMetrics().heightPixels, true); BitmapDrawable bitmapDrawable = new BitmapDrawable(context.getResources(), bitmap); view.setBackground(bitmapDrawable); }
关键是将drawable设置为button的图像,而不是作为背景。 喜欢这个:
rb.setButtonDrawable(R.drawable.whatever_drawable);
可以在他的xml中使用一个普通的ImageView,并使其可以点击(android:clickable =“true”)? 你只需要使用一个形状像一个button,即圆angular的图像。
您可以使用带有ImageView
的FrameLayout
作为第一个孩子,然后使用您的普通布局作为第二个孩子:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/background_image_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@drawable/your_drawable"/> <LinearLayout android:id="@+id/your_actual_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </FrameLayout>