我的xml中有一个Listview.它的结构是这样的:
<ListView
android:id="@+id/SeriesCastListItemView"
android:paddingTop="10dip"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="#FFFFFF"
android:dividerHeight="1px"/>
Run Code Online (Sandbox Code Playgroud)
现在我想为Listviewby java代码设置一个高度.我尝试使用以下代码.
ListView castListItemView = (ListView) findViewById(R.id.SeriesCastListItemView);
castListItemView.setAdapter(new CastAdapter(this, castDescriptionArr));
castListItemView.setLayoutParams(new ListView.LayoutParams(LayoutParams.FILL_PARENT, 500));
Run Code Online (Sandbox Code Playgroud)
但它给予了java.lang.ClassCastException: android.widget.AbsListView$LayoutParams.我的代码有什么问题?
在xml文件中我们可以做;
android:layout_gravity="center_vertical|right"
Run Code Online (Sandbox Code Playgroud)
我无法找到如何以编程方式设置这些参数.我觉得这样的事情是不可能的.
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
params.gravity = Gravity.BOTTOM;
params.gravity = Gravity.CENTER;
Run Code Online (Sandbox Code Playgroud) 在我的应用程序全屏,我写这段代码:
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
.
.
.
Run Code Online (Sandbox Code Playgroud)
并在我的应用程序中保持屏幕我在布局中编写此代码:
android:keepScreenOn="true"
Run Code Online (Sandbox Code Playgroud)
虽然并非总是如此,但有时会像我这样错误:
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:381)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:226)
at android.view.Window$LocalWindowManager.removeView(Window.java:432)
at android.app.Dialog.dismissDialog(Dialog.java:278)
at android.app.Dialog.access$000(Dialog.java:71)
at android.app.Dialog$1.run(Dialog.java:111)
at android.app.Dialog.dismiss(Dialog.java:268)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3691)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
我能做什么?我写真正的代码?谢谢...
例如,我以编程方式创建了4个表格,我希望每个表格高度为屏幕的1/4大小.每个桌子高度是屏幕尺寸的一半.我尝试了不同的方法,但是桌子高度并没有改变.我管理更改tablerow宽度,但高度没有.这是我的代码:
@SuppressLint("NewApi")
public class GameActivity extends Activity {
private Context context;
public void drawTable(){
int i;
TableLayout table = new TableLayout(context);
table.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT));
//table.setStretchAllColumns(true);
//table.setShrinkAllColumns(true);
//table.setWeightSum(1.0F);
TableRow[] rows = new TableRow[5];
for(i = 0; i < 4; ++i){
rows[i] = new TableRow(context);
rows[i].setBackgroundResource(R.drawable.images214);
rows[i].setWeightSum((float)1.0);
rows[i].setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, 10));
//rows[i].setScaleY(0.25F);
table.addView(rows[i]);
}
LinearLayout l = (LinearLayout) findViewById(R.id.linear);
l.addView(table);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
context = this;
// TableLayout table = new TableLayout(this);
// TableRow row1 = new …Run Code Online (Sandbox Code Playgroud) android tablerow layoutparams android-4.0-ice-cream-sandwich android-tablelayout
如何设置AbsListView.LayoutParams的布局重力?
我在自定义数组适配器中使用它,我需要根据变量设置布局重力.我的列表子包含一个线性布局根,但在适配器中,我无法设置LinearLayout参数,因为我得到的错误是LinearLayout.LayoutParams无法转换为AbsListView.Layout参数.
因此,我尝试为AbsListView设置layout_gravity,但它没有重力选项.
在这种情况下,如何以编程方式设置layout_gravity?
编辑:(添加源代码)
Listview Parent
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/messaging_background"
android:orientation="vertical"
android:padding="2dp" >
<ListView
android:id="@+id/messageThread"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/list_separator"
android:layout_alignParentTop="true"
android:layout_marginTop="5dp"
android:cacheColorHint="#00000000"
android:divider="@null"
android:dividerHeight="2dp"
android:fastScrollEnabled="false"
android:listSelector="#00000000"
android:transcriptMode="disabled" />
<View
android:id="@+id/list_separator"
android:layout_width="match_parent"
android:layout_height="1.0dip"
android:layout_above="@+id/footer"
android:background="@android:color/white" />
<LinearLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/filter"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.1"
android:background="@null"
android:contentDescription="@string/message_filter_button"
android:scaleType="fitCenter"
android:src="@drawable/filter" />
<EditText
android:id="@+id/send_message_text"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:imeOptions="actionSend"
android:inputType="textMultiLine"
android:maxLines="6"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbarDefaultDelayBeforeFade="200"
android:scrollbarFadeDuration="300"
android:scrollbarStyle="outsideOverlay"
android:scrollbars="vertical" />
<ImageButton
android:id="@+id/send"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.1"
android:background="@null"
android:contentDescription="@string/send_message_button"
android:scaleType="fitCenter" …Run Code Online (Sandbox Code Playgroud) 我正在创建一个应用程序,我希望能够动态地使用其边距移动视图.我试过用这个:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)cover.getLayoutParams();
params.leftMargin= 470;
params.topMargin= 20;
cover.setLayoutParams(params); (cover is an ImageView)
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于它使用px而不是dp.我也尝试使用DisplayMetrics将我的px值转换为dp但失败了.你能帮助我吗 ?
这是我创建新 ImageView 的源代码:
ImageView image = new ImageView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.width = screen_dimens(0.5, "w");
params.height = screen_dimens(0.5, "w");
image.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)
(screen_dimens(0.5, "w")=屏幕宽度的 50%)
但现在当我想获取图像的宽度时,我得到以下结果:
image.getWidth() => 0
image.getLayoutParams().width => 360
现在这两个函数有什么区别?如何设置图像宽度以便该getWidth()方法也返回正确的值?
我需要在任何正在运行的应用程序之上显示系统覆盖窗口.它工作正常,但只有当我的应用程序的活动在前台时.这是我使用的代码:
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE |
WindowManager.LayoutParams.FLAG_DIM_BEHIND |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.CENTER | Gravity.TOP;
params.dimAmount = 0.3f;
wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
mainAlertView = View.inflate(ctx, R.layout.system_alert_view, null);
wm.addView(mainAlertView, params);
Run Code Online (Sandbox Code Playgroud)
添加到WindowManager的视图包含空的LinearLayout,我在运行时添加了子视图:
mainAlertLayout.addView(childView);
Run Code Online (Sandbox Code Playgroud)
清单xml已SYSTEM_ALERT_WINDOW定义权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Run Code Online (Sandbox Code Playgroud)
当我的活动在前台运行时,这一切都很有效.只要我切换到任何其他应用程序或主屏幕,就不会显示叠加层.我调试了代码,它确实在运行wm.addView(),它没有抛出任何异常.我还玩过LayoutParams标志(删除了KEEP_SCREEN_ON和相关的等),但没有任何区别.
Android 4.4.2 fwiw
在下面的屏幕截图中,SearchView窗口小部件ActionBar不占用整个可用空间.

我需要它占据所有水平空间ActionBar(因此它横跨整个屏幕).
我尝试了什么:
以编程方式,尝试了这个onCreateOptionsMenu:
View searchViewView = (View) searchView;
searchViewView.getLayoutParams().width=LayoutParams.MATCH_PARENT;`
Run Code Online (Sandbox Code Playgroud)
这给出了:
java.lang.NullPointerException: Attempt to write to
field 'int android.view.ViewGroup$LayoutParams.width' on a null
object reference ...
TestActionBarTwo.MainActivity.onCreateOptionsMenu(MainActivity.java:57)
Run Code Online (Sandbox Code Playgroud)并在菜单资源中:
本android:layout_width="match_parent"似乎并没有造成任何影响.
我也试过android:layout_weight="1"(假设
ActionBar有a LinearLayout),但这也不起作用.
那么有没有一种方法SearchView(没有图标化)占据整个水平空间ActionBar?
编辑1
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.i(TAG, "onCreateOptionsMenu OF MainActivity CALLED."); //check
getMenuInflater().inflate(R.menu.activity_main_action_bar_menu, menu);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
// SearchAction
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
SearchView searchView …Run Code Online (Sandbox Code Playgroud) android android-layout layoutparams android-actionbar searchview
我正在制作动画,如果用户点击它,它将会增长视图.基本上,它是一张卡片,当点击它时,它会显示底部内容.为此,我正在扩展这样的动画:
Val collapseAnimation = object : Animation() {
override fun applyTransformation(interpolatedTime: Float, t: Transformation?) {
val interpolatedInverted = 1 - interpolatedTime
val headerLp = headerImage.layoutParams
headerLp.width = ...
headerImage.layoutParams = headerLp
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我需要将XML中定义的视图(wrap_content)的高度设置为0dp.基本上,我想长大一个从0dp到wrap_content的视图,为此我需要知道wrap_content大小是什么.
如何在不对视图大小进行硬编码的情况下以最有效的方式实现这一目标?
android ×10
layoutparams ×10
layout ×2
android-4.0-ice-cream-sandwich ×1
animation ×1
gravity ×1
imageview ×1
java ×1
listview ×1
margin ×1
searchview ×1
tablerow ×1
width ×1