gpt4 book ai didi

android - RemoteView setLayoutParams - 在 HomeScreen Widget 中更改 ImageView 大小

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:48 25 4
gpt4 key购买 nike

我的应用显示了一个共有 8 个按钮的小部件。我想让用户可以设置该小部件的样式并自定义按钮下方的 ImageView 的大小。目的是让按钮保持原样,但动态更改 ImageView 的大小。

为此,用户可以设置一个图标大小,该图标大小作为整数 iconSize 存储在 SharedPreference 中。

如何更改 Widget 中 ImageView 的大小?

目前,ImageView 是使用 xml 文件中设置的大小创建的。如何使用其他尺寸实现重绘?

我假设这里没有太多代码可以发布,但如果有必要,我很乐意发布,如果您知道哪些代码可以在这里提供帮助,请告诉我。

我不想做的事:

  • 调整整个小部件的大小

  • 创建大量布局文件以根据图标大小切换

部分代码:

这就是我在 Activity 中将 ImageView 大小设置为小部件预览的方式。 icons 是一组 ImageView,progress 指的是 ProgressBar,用于选择 iconSize

for (ImageView icon : icons) {
icon.requestLayout();

// convert into actual Pixels
progress = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_PX,
progress,
getResources().getDisplayMetrics()
);

// set width and height
icon.getLayoutParams().height = progress;
icon.getLayoutParams().width = progress;

sizeText.setText("" + progress);
}

最佳答案

这是我发现的一个小解决方法:

简单使用

views.setViewPadding(R.id.vieId, left, top, right, bottom);

( View = 远程 View )

您只需进行一些计算,使 100%(最大可能大小)的 iconSize 等于 0 填充,而 1% iconSize 等于最大填充。

没有它也能工作,但我认为添加它不会有什么坏处

android:cropToPadding="true"

如果您使用此方法,则属性为 ImageViews。

编辑:

我忘了提到,在设置填充后的某个时刻,您应该更新小部件(当用户退出应用程序以查看小部件时,我在 onPause() 中执行此操作)。如果不在 View 上调用 invalidate() 以强制重绘/更新它,在 Activity 中使用 setPadding() 也会导致无处可去。

这里有更多代码:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// Map the values, 100 is the custom max of my seekBar
// I am adding 1 to because the seekBar goes from 0-99,
// but the size from 1% to 100%
int iconSize = 100 - (progress+1);

for (ImageView icon : icons) {
// set the padding
icon.setPadding(iconSize, iconSize, iconSize, iconSize);

// force the ImageView to redraw with the new padding, this
// serves as a live preview of the icons' sizes.
icon.invalidate();
}
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// you might want to do something here
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// map the value
int iconSize = 100 - (seekBar.getProgress()+1);

// save it in your SharedPreferences or somewhere else
Utils.setDefaultsInt(Con._ICONSIZE, iconSize, MainPage.this);
}

});

关于android - RemoteView setLayoutParams - 在 HomeScreen Widget 中更改 ImageView 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29526563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com