我的Android应用程序目前有两个布局,用于其启动画面,纵向和横向.两者都使用相同的简单格式 - 与屏幕大小相同的图像,以简单的线性布局保存:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitCenter"
android:src="@drawable/splash_p"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
使用的图像是320w x 480h,Android会自动调整大小以适应屏幕,无论设备的屏幕尺寸如何.显然,例如,当为平板电脑调整大小时,图像不那么清晰.
我应该在这里指出,我的目标是尽可能减少最终应用程序的安装大小,并且我知道我可以为每个不同的屏幕大小包含相同图像的不同布局和大小.
我的启动画面由屏幕顶部三分之一处的应用程序名称组成,然后是屏幕底部三分之二处的图像.为了节省内存,我想将应用程序名称和图像裁剪成两个单独的图像,然后以纵向模式显示设备的线性垂直布局.然后,我将使用线性水平布局的图像,然后使用应用程序名称进行横向模式.
对于肖像布局我得到了这个:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
<View android:layout_height="45dp" android:layout_width="45dp" />
<ImageView android:layout_height="fill_parent"
android:src="@drawable/splashtext"
android:scaleType="fitCenter"
android:layout_gravity="center"
android:layout_width="fill_parent"></ImageView>
<View
android:layout_height="35dp"
android:layout_width="35dp" />
<ImageView
android:scaleType="fitCenter"
android:src="@drawable/splashpic"
android:layout_height="fill_parent" android:scaleType="fitCenter" android:layout_width="fill_parent" android:layout_gravity="center"/>
</LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
当我在eclipse中显示上述内容时,智能手机看起来没问题,但是在平板电脑上显示时图像不会放大,虽然我使用的是android:scaleType ="fitCenter"参数.我尝试在imageview layout_width和layout_height中使用dips而不是fill_parent,但这也不起作用.
我究竟做错了什么?还有另一种方法吗?
谢谢
我已根据@ KaHa6u的帮助编辑了这个修改过的XML的问题.所以现在我有:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" …Run Code Online (Sandbox Code Playgroud) 我有一个表格,其中包含各种唱片艺术家的姓名。其中之一的名称中带有破折号。如果我运行以下命令:
Select artist
, substring(artist,8,1) as substring_artist
, ascii(substring(artist,8,1)) as ascii_table
, ascii('-') as ascii_dash_key /*The dash key next to zero */
, len(artist) as len_artist
From [dbo].[mytable] where artist like 'Sleater%'
Run Code Online (Sandbox Code Playgroud)
然后返回以下内容。这似乎表明在艺术家列中存储了破折号(ASCII 45)
但是,如果我将where子句更改为:
From [dbo].[mytable] where artist like 'Sleater' + char(45) + '%'
Run Code Online (Sandbox Code Playgroud)
我没有返回任何结果。如果我将artist列的输出复制并粘贴到十六进制编辑器中,则可以看到破折号实际上存储为E2 80 90,即多字节连字符的Unicode字节序列。
因此,我想查找这种情况并用标准的ascii连字符代替,但是我对于使用什么标准来查找这些E2 80 90连字符不知所措?
我的应用程序包含带有图像的按钮,使用setCompoundDrawablesWithIntrinsicBounds设置.我使用app的drawables文件夹中的图像,但也使用从网上下载并存储在SD卡上的图像.我发现我需要升级SD卡图像,这样它们的渲染大小与drawables中的图像大小相同.我这样做使用:
Options opts = new BitmapFactory.Options();
opts.inDensity = 160;
Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() +
context.getResources().getString(R.string.savefolder) + iconfile, opts);
myIcon = new BitmapDrawable(context.getResources(), bm);
btn.setCompoundDrawablesWithIntrinsicBounds(myIcon, null, null, null );
Run Code Online (Sandbox Code Playgroud)
这一直没有问题,直到我将手机更新到Android 4.1.1并注意到下载的图像现在出现的尺寸比可绘制文件夹的图像小得多.
我使用inDensity值搞砸了很小的效果,但是根据btnheight值(只是图像所在按钮的高度)缩放位图更成功:
int intoffset=bm.getHeight() - bm.getWidth();
myIcon = new BitmapDrawable(context.getResources(),
Bitmap.createScaledBitmap(bm, btnheight - (((btnheight/100)*10) +
intoffset) , btnheight - ((btnheight/100)*10), true));
Run Code Online (Sandbox Code Playgroud)
这种作品,但图像仍然比它所在的按钮大一点(根据上述情况,情况应该不是这样,因为它应该将图像高度缩放到按钮高度的90%.)I做了这个测试.我不能在我的应用程序中使用此方法,因为按钮高度根据按钮上显示的字体大小而变化,并且用户可以在应用程序首选项中更改此字体大小.
顺便说一下,奇怪的是(?),通过将位图缩放到原始高度的两倍来使用
Bitmap.createScaledBitmap(bm, bm.getWidth() * 2
, bm.getHeight() * 2, true));
Run Code Online (Sandbox Code Playgroud)
它在4.0.3和4.1.1中正确呈现(好吧,它显示的尺寸与可绘制的图标大小相同),但在2.1中表现得如你所期望的那样(渲染得比它所在的按钮大).
如果有人对4.1.1中为什么会发生这种情况有任何见解,我可以这样做,我的decodeFile位图呈现与我的可绘制位图相同的大小,而不必单独编写4.1.1代码,我将不胜感激!