- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,我在 GridView 中加载了多个按钮。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:paddingLeft="25dp"
android:paddingRight="25dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="128dp"
android:numColumns="auto_fit"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:stretchMode="columnWidth"
android:gravity="center" />
</LinearLayout>
按钮是使用适配器动态添加的,但是如果我预定义的边界 (320x320) 在某些设备中看起来不错,而在其他设备中太小或太大,并且如果我选择 Intrinsic boundaries 它们总是微型的。
预定义边界 (320x320):
智能手机 View :
平板电脑 View :
内部边界 (136x136):
我将图像存储在Assets 目录中,您的第一个问题是为什么?
你可以告诉我,我应该将它们保存在 Resources/drawable 中,我知道这一点,但我有 100 多张图片,每张都存储在一个子目录中具有唯一 ID 的文件夹,其中可以包含至少一张具有如下 ID 的图像:1.jpg、2.jpg 等。
如您所见,如果我将所有这些图像和子目录移动到可绘制文件夹,它就不会工作 ( Can the Android drawable directory contain subdirectories? )。
我有这个功能是为了从 Assets 文件夹中获取 Drawable:
public Drawable GetImage(int ID)
{
var thumbnail = string.Format("Thumbnails/{0}/1.jpg", ID);
using (StreamReader sr = new StreamReader(Application.Context.Assets.Open(thumbnail)))
{
Drawable d = Drawable.CreateFromStream(sr.BaseStream, null);
d.SetBounds(0, 0, 320, 320);
return d;
}
}
以下是我如何将适配器中的数据加载到按钮:
btnRecipe.Text = data[position].name;
btnRecipe.SetHeight(560);
// btnRecipe.SetWidth(122);
// btnRecipe.SetCompoundDrawablesWithIntrinsicBounds();
btnRecipe.SetTextColor(new Android.Graphics.Color(255, 255, 255));
btnRecipe.SetCompoundDrawables(null, data[position].image, null, null);
我想知道是否有任何方法可以处理或自动调整图像,因为我有另一个例子,使用 Drawable 文件夹中的数据和 XML 代码,图像被缩放而没有其他任何东西,例如:
代码:
<Button
android:text="@string/BtnComidas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/my_white"
android:id="@+id/BtnComidas"
android:drawableTop="@drawable/comidas" />
此外,我想澄清一下,这张图片比之前的图片 (136x136) 小 128x128,而且看起来好多了,我在 Drawable 文件夹中只有一张图片副本,我没有hdpi 或 mdpi 副本,如您所见,它在智能手机和平板电脑上看起来很棒,我不需要做任何额外的更改来缩放它。
一个可能的问题和答案,为什么我要使用 GridView 来加载按钮?例如,如果我应该使用另一个控件或布局。
我不知道同时显示图像和文本的另一种方法,我能够按预期处理点击事件。
此外,如果有人有其他方法可以在 GridView 中显示带有文本的多个图像或其他可以解决我当前问题的方法,我愿意接受任何建议。感谢您的帮助、时间、经验和有值(value)的知识。
最佳答案
我找到了可以帮助更多人的解决方案:
1) 您需要将 GridView 的列宽共享给构造函数:
GridDishes.Adapter = new GridViewAdapter(this, data, GridDishes.ColumnWidth, IsSmartphone());
2) 然后配置理想尺寸:
public GridViewAdapter(Context c, List<CompatedInfo> data, int size, bool isSmartphone)
{
NotifyDataSetChanged();
context = c;
this.data = data;
//Define the size that you're going to use
if (Size > 0)
Size = (int)(size * 0.8);
//This is going to help you to have the same size for all elements
if (isSmartphone)
Height = (int)(Size * 1.65);
else
Height = (int)(Size * 1.7);
}
3) 在适配器中定义新尺寸:
data[position].image.SetBounds(0, 0, Size, Size);
4) 如果您希望所有 View 具有相同的高度,则在构造函数中预定义高度:
btnRecipe.SetHeight(Height);
可选:
如果你想确定屏幕并像我对元素的最大尺寸做的那样做一些小的改变,这个函数很有用:
private bool IsSmartphone()
{
DisplayMetrics metrics = new DisplayMetrics();
WindowManager.DefaultDisplay.GetMetrics(metrics);
float yInches = metrics.HeightPixels / metrics.Ydpi;
float xInches = metrics.WidthPixels / metrics.Xdpi;
double diagonalInches = Math.Sqrt(xInches * xInches + yInches * yInches);
if (diagonalInches >= 6.5)
{
return false;
}
else
{
return true;
}
}
函数来源:
关于android - 如何以编程方式在 Android 的按钮中缩放或自动调整 Drawable Top 的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43693434/
我一直在阅读有关汇编函数的内容,但对于是使用进入和退出还是仅使用调用/返回指令来快速执行,我感到很困惑。一种方式快而另一种方式更小吗?例如,在不内联函数的情况下,在汇编中执行此操作的最快(stdcal
我正在处理一个元组列表,如下所示: res = [('stori', 'JJ'), ('man', 'NN'), ('unnatur', 'JJ'), ('feel', 'NN'), ('pig',
最近我一直在做很多网络或 IO 绑定(bind)操作,使用线程有助于加快代码速度。我注意到我一直在一遍又一遍地编写这样的代码: threads = [] for machine, user, data
假设我有一个名为 user_stats 的资源,其中包含用户拥有的帖子、评论、喜欢和关注者的数量。是否有一种 RESTful 方式只询问该统计数据的一部分(即,对于 user_stats/3,请告诉我
我有一个简单的 api,它的工作原理是这样的: 用户创建一个请求 ( POST /requests ) 另一个用户检索所有请求 ( GET /requests ) 然后向请求添加报价 ( POST /
考虑以下 CDK Python 中的示例(对于这个问题,不需要 AWS 知识,这应该对基本上任何构建器模式都有效,我只是在这个示例中使用 CDK,因为我使用这个库遇到了这个问题。): from aws
Scala 中管理对象池的首选方法是什么? 我需要单线程创建和删除大规模对象(不需要同步)。在 C++ 中,我使用了静态对象数组。 在 Scala 中处理它的惯用和有效方法是什么? 最佳答案 我会把它
我有一个带有一些内置方法的类。这是该类的抽象示例: class Foo: def __init__(self): self.a = 0 self.b = 0
返回和检查方法执行的 Pythonic 方式 我目前在 python 代码中使用 golang 编码风格,决定移动 pythonic 方式 例子: import sys from typing imp
我正在开发一个 RESTful API。其中一个 URL 允许调用者通过 id 请求特定人员的记录。 返回该 id 不存在的记录的常规值是什么?服务器是否应该发回一个空对象或者一个 404,或者其他什
我正在使用 pathlib.Path() 检查文件是否存在,并使用 rasterio 将其作为图像打开. filename = pathlib.Path("./my_file-name.tif") 但
我正在寻找一种 Pythonic 方式来从列表和字典创建嵌套字典。以下两个语句产生相同的结果: a = [3, 4] b = {'a': 1, 'b': 2} c = dict(zip(b, a))
我有一个正在操裁剪理设备的脚本。设备有时会发生物理故障,当它发生时,我想重置设备并继续执行脚本。我有这个: while True: do_device_control() device
做组合别名的最pythonic和正确的方法是什么? 这是一个假设的场景: class House: def cleanup(self, arg1, arg2, kwarg1=False):
我正在开发一个小型客户端服务器程序来收集订单。我想以“REST(ful)方式”来做到这一点。 我想做的是: 收集所有订单行(产品和数量)并将完整订单发送到服务器 目前我看到有两种选择: 将每个订单行发
我知道在 Groovy 中您可以使用字符串调用类/对象上的方法。例如: Foo."get"(1) /* or */ String meth = "get" Foo."$meth"(1) 有没有办法
在 ECMAScript6 中,您可以使用扩展运算符来解构这样的对象 const {a, ...rest} = obj; 它将 obj 浅拷贝到 rest,不带属性 a。 有没有一种干净的方法可以在
我有几个函数返回数字或None。我希望我的包装函数返回第一个不是 None 的结果。除了下面的方法之外,还有其他方法吗? def func1(): return None def func2(
假设我想设计一个 REST api 来讨论歌曲、专辑和艺术家(实际上我就是这样做的,就像我之前的 1312414 个人一样)。 歌曲资源始终与其所属专辑相关联。相反,专辑资源与其包含的所有歌曲相关联。
这是我认为必须经常出现的问题,但我一直无法找到一个好的解决方案。假设我有一个函数,它可以作为参数传递一个开放资源(如文件或数据库连接对象),或者需要自己创建一个。如果函数需要自己打开文件,最佳实践通常
我是一名优秀的程序员,十分优秀!