我有一个具有9补丁背景图像的RelativeLayout.图像是一个简单的语音气泡,底部中间有一个完美居中的"箭头".
RelativeLayout被充气并放置在MapView上.使用模拟器,可以轻松地将语音气泡指向某个位置,并将其扩展到其内容(文本,图像或两者).但是,当我在手机上运行我的应用程序时,9补丁无法正常伸展.语音气泡的"箭头"将向左偏移一个非常明显的数量.
我主要测试的是Nexus S,还有三星Captivate和Nexus One.针对SDK 7.针对SDK 7+的经过测试的模拟器.只有硬件设备似乎有这个问题.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:id="@+id/BubbleLayout"
android:background="@drawable/bubble"
android:layout_width="wrap_content"
android:gravity="center_horizontal">
<TextView android:layout_height="wrap_content"
android:id="@+id/date"
android:layout_width="wrap_content"
android:maxWidth="196dp"></TextView>
<TextView android:layout_below="@+id/date"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:maxWidth="196dp"
android:id="@+id/summary"></TextView>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud) 例如,如果你想要将LayoutParams某些视图更改WRAP_CONTENT为两者width和heightprogrammaticaly,它将看起来像这样:
final ViewGroup.LayoutParams lp = yourView.getLayoutParams();
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
lp.width = ViewGroup.LayoutParams.WRAP_CONTENT;
Run Code Online (Sandbox Code Playgroud)
因为我不知道getLayoutParams返回params的引用,所以这段代码就足够了,但我经常在例子中看到等等,在这一行之后,一个如下:
yourView.setLayoutParams(lp);
Run Code Online (Sandbox Code Playgroud)
我想知道这条线的重点是什么.这只是为了更好的代码可读性,还是有些情况下没有它就无法工作?
我需要以编程方式在RecyclerView上设置上边距,但我得到以下异常:
java.lang.RuntimeException: Unable to resume activity java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.support.v7.widget.RecyclerView$LayoutParams
这是我的代码:
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams)recyclerView.getLayoutParams();
int marginTopDp = (int)getResources().getDimension(R.dimen.margin);
int marginTopPx = (int) (marginTopDp * getResources().getDisplayMetrics().density + 0.5f);
layoutParams.setMargins(0, marginTopPx, 0, 0);
recyclerView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)
如果我使用ViewGroup.LayoutParams layoutParams = recyclerView.getLayoutParams堆栈跟踪建议,我不能再调用setMargin因为该方法不存在ViewGroup.LayoutParams.
任何帮助,将不胜感激.
我编写了动态设置视图高度和宽度的代码
view.getLayoutParams().width = 120;
view.getLayoutParams().height = 120;
Run Code Online (Sandbox Code Playgroud)
它与下面的牛轧糖设备完美配合,但是用牛轧糖它不起作用.它只是将高度和宽度设为0.牛轧糖更新后的任何变化?
更新:
但是它有效
1)我view.requestLayout()在设置高度和宽度后使用
2)view.setLayoutParams(new LinearLayout.LayoutParams(200, 120));
那么为什么它不使用这两个选项就在前牛轧糖设备上工作呢?
我是android的新手并且陷入了一个非常基本的问题.我正在开发一个应用程序,我需要在fling上刷图像.在每个图像上我都要动态添加按钮.我使用AddContentView()添加按钮来添加按钮.一切都运行正常,但我想动态设置按钮的位置.我已经在很多地方读过,每个人都在使用addView()来添加按钮并设置它们的位置.我试过这个
但它没有工作.任何人都可以告诉我如何使用addContentView()设置按钮的边距(位置).任何帮助将非常感激.
我正在制作一个代码,根据其应用程序提供的屏幕大小来改变其大小.它通过View的onSizeChanged()和onDraw()方法获取整个宽度和高度(或其适当的视图的w和h).
它在另一个代码中工作得很好但是现在每当我尝试输入命令'setLayoutParams()时它都显示错误消息你能帮我解决这个问题吗?setLayoutParams()实际上在代码中的任何地方都不起作用.下面是主类代码.
public class ManipulateDesign extends Activity {
private LinearLayout ll;
private ScrollView sv;
private TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ll = (LinearLayout) findViewById(R.id.ll);
sv = (ScrollView) findViewById(R.id.sv);
tv = new TextView(this);
tv.setText("You're in the first ScrollView\n" +
"- Living Universe \n" +
"Wish (upon a star) Hope to (be again)\n" +
"The one you find, when all is done and through!\n" +
"If all, made … 我在xml中有LinearLayout:
<LinearLayout
android:id="@+id/progress"
android:layout_width="fill_parent"
android:layout_height="@dimen/progress_height"
android:layout_alignParentBottom="true"
android:baselineAligned="false"
android:orientation="horizontal" />
Run Code Online (Sandbox Code Playgroud)
我想生成动态几个另一LinearLayouts并把他们的"进步" equaly间隔,例如:
每个LinearLayout都会有随机的背景颜色,我写的是这样的:
mProgress = (LinearLayout) findViewById(R.id.progress);
.
.
.
LinearLayout prog = new LinearLayout(this);
prog.setBackgroundColor(CommonUtils.getNextRandomColor());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);
prog.setLayoutParams(params);
mProgress.addView(prog);
Run Code Online (Sandbox Code Playgroud)
当用户按下按钮时,将生成另一个LL,颜色不同.
我的方法不起作用.布局中没有背景颜色.
也许有另一种更简单的方法来实现某种进度条,颜色共享一些空间?
我想在整个屏幕上叠加透明视图,包括Android 4.4中最底部的导航栏.
我可以在Android 4.3中通过将窗口管理器LayoutParams定义为TYPE_SYSTEM_OVERLAY来实现,但是当我使用相同的定义时,布局现在被推到导航栏后面.如果由于KitKat最近的更新,请你告诉我吗?或者如果有人有解决方案,请与我分享.
问候
android view relativelayout layoutparams android-windowmanager
请在回答标准例程之前阅读问题以打印Toast :)
我想在屏幕的左上角显示自定义Toast.我使用此代码创建Toast:
Toast mFixedToast = new Toast(getApplicationContext());
mFixedToast.setDuration(timeout);
mFixedToast.setView(myInflatedLayout);
mFixedToast.setGravity(Gravity.TOP|Gravity.FILL_HORIZONTAL, 0, 0);
mFixedToast.setMargins(0,0);
Run Code Online (Sandbox Code Playgroud)
然而,在一些设备中,例如三星Galaxy S4,吐司不是位于(0,0),而是具有40-50像素的边缘.许多其他设备按预期工作.
我很肯定WindowManager添加了边距(Toast视图作为TYPE_TOAST类型的视图添加到WindowManager)
这是为什么?可以修改吗?请看下面的代码,我已经将Toast.java克隆到我自己的类中,并隔离了将视图添加到WM的行:
// LayoutParams for the TOAST view ... tried to change params.type but no luck.
final WindowManager.LayoutParams params = mParams;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSLUCENT;
params.windowAnimations = android.R.style.Animation_Toast;
params.type = WindowManager.LayoutParams.TYPE_TOAST;
mWM = (WindowManager)mView.getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
mParams.gravity = gravity;
// CHECKED these all are 0 !!!
mParams.x = mX; mParams.y = …Run Code Online (Sandbox Code Playgroud) 所以昨天我正在编程,突然我setTitle在WindowManager.LayoutParams课堂上遇到了这个方法,为什么这个类有这样的setTitle方法呢?在哪里使用?该文档没有说明该功能.
我的猜测是,它可以用于调试或类似的东西,但除此之外,我没有线索.
为什么它会被宣布为最终方法?因为我们尚未准备好覆盖它?
就是想...
注意:以下两个答案都是"正确"并提供良好信息的一些方法,但只能接受一个.