标签: layoutparams

为什么9-patch图形尺寸在模拟器中正确但在手机上没有?

我有一个具有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)

android android-layout layoutparams android-mapview

8
推荐指数
1
解决办法
6668
查看次数

为什么我们使用setLayoutParams?

例如,如果你想要将LayoutParams某些视图更改WRAP_CONTENT为两者widthheightprogrammaticaly,它将看起来像这样:

 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)

我想知道这条线的重点是什么.这只是为了更好的代码可读性,还是有些情况下没有它就无法工作?

android layoutparams

8
推荐指数
1
解决办法
2095
查看次数

以编程方式在RecyclerView上设置保证金

我需要以编程方式在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.

任何帮助,将不胜感激.

android layoutparams android-recyclerview

8
推荐指数
2
解决办法
2万
查看次数

view.getLayoutParams().宽度不适用于nougat

我编写了动态设置视图高度和宽度的代码

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 layoutparams android-7.0-nougat

8
推荐指数
2
解决办法
5521
查看次数

以编程方式设置Button的边距

我是android的新手并且陷入了一个非常基本的问题.我正在开发一个应用程序,我需要在fling上刷图像.在每个图像上我都要动态添加按钮.我使用AddContentView()添加按钮来添加按钮.一切都运行正常,但我想动态设置按钮的位置.我已经在很多地方读过,每个人都在使用addView()来添加按钮并设置它们的位置.我试过这个

但它没有工作.任何人都可以告诉我如何使用addContentView()设置按钮的边距(位置).任何帮助将非常感激.

android imagebutton layoutparams

7
推荐指数
1
解决办法
1万
查看次数

setLayoutParams()方法不起作用

我正在制作一个代码,根据其应用程序提供的屏幕大小来改变其大小.它通过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 …

android view layoutparams

6
推荐指数
1
解决办法
2万
查看次数

如何以编程方式将LinearLayout添加背景颜色,并将权重添加到另一个布局

我在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将占用所有空间.
  • 第二个LL将与1LL共享50%的空间
  • 第三LL将分享33%的空间,1LL和2LL
  • 等等...

每个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 android-layout android-linearlayout layoutparams

6
推荐指数
2
解决办法
1万
查看次数

在Android 4.4(KitKat)中叠加全屏透明图层

我想在整个屏幕上叠加透明视图,包括Android 4.4中最底部的导航栏.

我可以在Android 4.3中通过将窗口管理器LayoutParams定义为TYPE_SYSTEM_OVERLAY来实现,但是当我使用相同的定义时,布局现在被推到导航栏后面.如果由于KitKat最近的更新,请你告诉我吗?或者如果有人有解决方案,请与我分享.

问候

android view relativelayout layoutparams android-windowmanager

6
推荐指数
0
解决办法
635
查看次数

屏幕顶部的自定义Toast

请在回答标准例程之前阅读问题以打印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)

android customizing layoutparams android-toast

6
推荐指数
1
解决办法
1784
查看次数

WindowManager.LayoutParams为什么有setTitle方法?

所以昨天我正在编程,突然我setTitleWindowManager.LayoutParams课堂上遇到了这个方法,为什么这个类有这样的setTitle方法呢?在哪里使用?该文档没有说明该功能.

我的猜测是,它可以用于调试或类似的东西,但除此之外,我没有线索.

为什么它会被宣布为最终方法?因为我们尚未准备好覆盖它?

就是想...

注意:以下两个答案都是"正确"并提供良好信息的一些方法,但只能接受一个.

的getTitle

的setTitle

android layoutparams android-windowmanager

5
推荐指数
1
解决办法
415
查看次数