我正在学习如何在Android手机上编程。但是,我不确定如何使我的应用程序适用于不同的屏幕尺寸和分辨率。
我在Android网站上阅读了教程,但仍不确定该怎么做。
首先我知道有不同的文件,所以可以为每个尺寸制作布局,但我的问题是大部分屏幕需要动态创建,所以不会有太多的东西放在这些文件中。
所以我不知道如何根据屏幕尺寸重新调整动态控件的大小。
我还读过,除了xml文件之外,在除了视图逻辑和编程逻辑之外的任何东西中进行控制都是不好的做法。但是他们从不谈论你是否需要动态地制作这些控件。
那么还有其他方法可以做到这一点被认为是一种良好的做法吗?
修改
当我尝试运行切换台应用程序时出现此错误。
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: Error type 2
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: Error: Unable to connect to activity manager; is the system running?
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: usage: am [start|broadcast|instrument|profile]
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: am start [-D] INTENT
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: am broadcast INTENT
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: am instrument [-r] [-e <ARG_NAME> <ARG_VALUE>] [-p <PROF_FILE>]
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: [-w] <COMPONENT>
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: am profile <PROCESS> [start <PROF_FILE>|stop]
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: INTENT is described with:
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: [-c <CATEGORY> [-c <CATEGORY>] ...]
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[2010-04-27 12:06:41 - ViewSwitcherTest] ActivityManager: [-n <COMPONENT>] [-f <FLAGS>] [<URI>]
对你的问题:它是动态的,因为 我的例子中的按钮增长了 收缩取决于3之一 可能的尺寸,因为他们使用 缩放像素(你可能知道 你不必处理屏幕 尺寸本身)。所以缩放像素 相比真实的像素有一个大小 0.75px,1.0px或1.5px。 Android的 自动和动态调整 它到实际大小。所以你没有 必须在你的代码中关心这一点。
因此,如果我使用缩放像素,那么我不必担心不同的屏幕尺寸?
目前我不知道一个例子 除了你必须交易的游戏 用“真实”像素。但如果你想使用 它,乘以它的值 当前密度。这是你的“比例”。 我没有带球的例子 我已经有另一个使用了 相同的技术。你可以运行它 不同的屏幕尺寸,你会的 看到按钮总是适合 进入布局。你可以使用 你的意图相同的技术。在 这个例子你可以滚动 从一个视图到“Scrn”按钮 另外4个视图。 (在这一刻 他们都有黑色背景 你没有看到他们是不同的 视图)。 “Enter”按钮退出 测试。这是一个Eclipse项目。您可以 下载
所以,如果我想处理比率,那么我使用真实像素而不是缩放像素?这给了我什么优势?
缩放像素的工作方式是从纵向更改为横向(即它是否会填满新找到的空间)?
最后我应该通过代码制作控件还是有其他方法?正如我所说,我从一个必须看起来像这样的网络服务中获取数据
checkbox label label
它可以是一条记录或10,000条记录我不知道所以这些必须附加到类似于窗口面板的东西(其中的控件有一个滚动条)。
由于♠
答案 0 :(得分:0)
我从未使用过不同的文件或目录,尽管我总是处理所有可能的屏幕尺寸。如何处理3种不同的尺寸取决于您打算做什么。我认为xml中的缩放像素是应用程序所需的一切。查看我的一个帖子的最后一个帖子。我认为它会给你一个提示来解决你的问题:
Handling correct pixel ratio on different screen sizes
当您需要知道密度时(例如,为了计算游戏中正确的像素移动比率,您可以将布局中的“缩放像素”与从DisplayMetrics类中获得的密度组合:
public class YourActivity extends Activity {
private DisplayMetrics metrics = new DisplayMetrics();
private float density;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindowManager().getDefaultDisplay().getMetrics(metrics);
density = metrics.density;
....
}
密度只能是0.75,1.0或1.5。因此,您可以根据需要使用这些值,例如用于“像素明智”的图形运动。这是我使用的方法。
答案 1 :(得分:0)
问题: 它是动态的,因为我的示例中的按钮根据3种可能的大小之一增长和缩小,因为它们使用缩放像素(您可能知道您不必自己处理屏幕尺寸)。因此,与实际像素相比,缩放像素的大小为0.75px,1.0px或1.5px。 Android会自动将其动态调整为实际大小。因此,您不必在代码中关注此问题。 目前我不知道一个例子,除了你必须处理“真实”像素的游戏。但是如果你想使用它,请将它与当前密度的值相乘。这是你的“比例”。 我没有球的例子,但我有另一个使用相同的技术。您可以在不同的屏幕尺寸上运行它,您将看到按钮将始终适合布局。你可以使用相同的技术。在此示例中,您可以使用“Scrn”按钮从一个视图滚动到另一个视图中的另一个视图。 (目前它们都有黑色背景,所以你不会看到它们是不同的视图)。 “Enter”按钮退出测试。这是一个Eclipse项目。您可以从此处下载:http://android.pithax.net/ViewSwitcherTest.zip
答案 2 :(得分:0)
因此,如果我使用缩放像素,那么我不必担心不同的屏幕尺寸?
在我看来,我会说是的。至少这是我处理不同屏幕尺寸的方法。
所以,如果我想处理比率,那么我使用真实像素而不是缩放像素?这给了我什么优势?
代码中的每个像素值都是“真实”像素。例如在我的例子中view1.setHeight((int)(350 *密度));如果我不将它乘以密度,它将总是350px而不是350sp。没有方法可以提供不同类型的像素,例如sp,dip或px。单位总是像素。如果使用动态布局(使用缩放像素),则必须注意在代码中设置的所有像素必须具有相同的比例。 Android知道比率是多少(密度),因此您必须将其与密度相乘,以确保在每个屏幕尺寸中始终具有正确的比率。这是您使用此方法获得的优势。你可能很清楚你的例子正在运行。
will scaled pixels work with changing from portrait to landscape( ie will it fill up the new found space)?
缩放像素将注意每个尺寸的比例是相同的。这意味着您定义的景观设计将在每个屏幕尺寸相同。
最后我应该通过代码制作控件还是有其他方法?正如我所说,我从一个必须看起来像这样的网络服务中获取数据
复选框标签标签
它可以是一条记录或10,000条记录 我不知道这些必须如此 附加到类似的东西 窗口面板(那里的控件 得到一个滚动条。)
现在我明白你的意思了。这是两个不同的主题。一个是你的结果会在每个屏幕上看起来都一样。这就是我们一直在谈论的内容。
我猜这些动态记录的问题无法通过预定义的xml解决。在任何情况下我都会通过代码执行此操作(在我的示例中,我还通过代码添加了视图)。我不确定哪种方法可能是最好的,但也许是一种表格布局,您可以根据需要添加尽可能多的行代码。我对此并不十分熟悉,但我认为这并不是很困难。我认为Android样本中甚至有类似的例子。
到我的应用: “./adb logcat”说什么? 如果你无法进入运行状态,请创建一个API级别为4的新Android项目,更改我的项目中的文件结构(实际上你只需要删除drawable-ldpi和hdpi并将第3个重命名为“drawable”) 。而且你必须使用相同的包名。否则会崩溃。实际上创建一个新的Android项目会更好。也许它崩溃了,因为你没有设置正确的包名(net.pithax.viewswitchertest)。在zip中这些是文件夹,所以无论如何你都无法运行zip。