我创建了一个小部件/控件,我可以重用我通过扩展创建的RelativeLayout.然后,在我的一个活动中,我在循环中创建了一堆这些小部件.但是,当我想让每个小部件响应一次点击时,我遇到了一个问题.
我发现设置OnTouchListener有效:
this.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1) {
//Triggers debug message
}
});
Run Code Online (Sandbox Code Playgroud)
但OnClickListener不是:
this.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//Doesn't trigger debug message
}
});
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
在我的主题中,我定义了以下规则来在状态栏后面绘制我的观点:
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
Run Code Online (Sandbox Code Playgroud)
并在Activity(onCreate)中:
getWindow.getDecorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
)
Run Code Online (Sandbox Code Playgroud)
然后,在我的View中使用Barcodescanner,它应该在状态栏后面绘制,这是有效的.但是,当我应用于android:fitsSystemWindows任何子视图时,他们不会调整其位置.但是,当我将它应用于根元素时,它正在工作.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<my.Scanner
android:id="@+id/scanner"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"> <!-- Should receive a top padding, right? -->
<View android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/red" />
</FrameLayout>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

AppCompat视图组件和标准/默认视图组件之间有什么区别?
例如,an AppCompatEditText和an EditText之间或a AppCompatButton和a 之间的差异Button.
查看开发人员文档android.support.v7.widget,AppCompat视图组件被描述为" tint aware ",但这是唯一的区别,这究竟是做什么的?
android android-appcompat android-view android-support-library
我需要实现一个带有三角形项目的ListView,如图所示.添加到ListView的视图通常是矩形的.即使在文档中,视图也被描述为"占据屏幕上的矩形区域并负责绘图和事件处理".
如何将非矩形形状添加到ListView,同时确保单击区域仅限于形状,在本例中为三角形.
谢谢!
目前,我有以下底部登录按钮.
XML看起来像这样
<LinearLayout
android:background="?attr/welcomeBottomNavBarBackground"
android:orientation="horizontal"
android:id="@+id/sign_in_bottom_nav_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<Button
style="?android:attr/buttonBarButtonStyle"
android:id="@+id/sign_in_button"
android:layout_width="0dp"
android:width="0dp"
android:layout_weight="1.0"
android:layout_height="48dp"
android:gravity="center"
android:layout_gravity="center"
android:enabled="true"
android:textAllCaps="true"
android:text="@string/log_in" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我想在按下按钮时删除按钮周围的填充(或者我应该将其称为边距?请参阅我最底部的p/s部分).
我试过了
<Button
...
...
android:minHeight="0dp"
android:minWidth="0dp" />
Run Code Online (Sandbox Code Playgroud)
它不起作用也没有效果.
我进一步尝试
<Button
...
...
android:background="@null"
android:minHeight="0dp"
android:minWidth="0dp" />
Run Code Online (Sandbox Code Playgroud)
按下时不再填充.然而,设计压制视觉效果的材料也将消失.
我可以知道在压制过程中删除按钮填充的最佳方法是什么,但保留材料设计按下的视觉效果?
我真的不知道是否应该称之为填充或边距.我希望实现的是,当我们按下底部区域时,按下视觉效果变化应覆盖整个100%底部区域(@+id/sign_in_bottom_nav_bar),而不是当前95%的底部区域.
我需要为Android创建一个应用程序,其中双色文本将显示在双色背景上.见左图.然后,应该用动画移动线条,结果图像应该在右边的图片上.
我有以下问题:
--------- 
我有一个以纵向模式播放的视频.在视频结束时,我需要显示一些视图.这到目前为止工作正常.
但是,我有一个问题,即在关闭屏幕后再返回活动,然后再打开屏幕时,视频最后一帧的视图不能正确重绘.
我观察到的是,当屏幕重新亮起并且我解锁时.我的视频和图像首先在全屏模式之外呈现(状态栏仍然显示),然后屏幕将进入全屏模式,将所有视图向上移动并导致伪像.
看起来这些视图在渲染后通过过渡到全屏来移出视图范围.
我真的很难过如何防止这种情况发生.
这是github上的沙箱项目,以避免使这个帖子充满代码.
该项目的基本设置如下:
片段活动在其布局上有视频视图和按钮视图.然后它将一个片段添加到contentView容器中.contentView在视频播放结束前1秒内淡出.
一切顺利,问题在于打开和关闭屏幕电源后返回应用程序.
此外,有时视频将完全退出,使视图位于黑色背景上.
提前感谢您提供的任何帮助.

这是您关闭,重新打开和解锁屏幕时发生的瑕疵.请注意,我必须拍一张照片.在DDMS上,屏幕截图工具可以正确查看图像.

android fullscreen android-video-player android-fragments android-view
我有一个GraphicsView从类扩展的View类,我想将这个GraphicsView类添加到我的项目的主布局中.我怎样才能做到这一点?
static public class GraphicsView extends View {
public GraphicsView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
// Drawing commands go here
Path rect = new Path();
rect.addRect(100, 100, 250, 50, Direction.CW);
Paint cPaint = new Paint();
cPaint.setColor(Color.LTGRAY);
canvas.drawPath(rect, cPaint);
}
}
Run Code Online (Sandbox Code Playgroud)
和我的main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linnnnlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<TextView
android:id="@+id/Customfont"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<View
android:id="@+id/view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 这个问题源于必须动态地显示/隐藏不同的视图.View有3个可见性设置 - 可见,不可见和消失.如果你有一个父视图,例如a LinearLayout,它有几个子视图(无关紧要)是设置父视图的可见性与在所有子视图上独立设置visiblity相同?例如,如果我说
LinearLayout container = (LinearLayout) findViewById(R.id.layout_1);
container.setVisiblity(View.GONE);
Run Code Online (Sandbox Code Playgroud)
这与查找每个子视图并将所有这些可见性设置为相同View.GONE吗?如果父母不是View.GONE,View.INVISIBLE怎么办?所有的孩子还在画画但是还没有看到吗?
假设我有一个可自由聚焦的自定义ViewGroup,并且有一些可以聚焦的子视图(Android机顶盒的自定义垂直菜单应该在远程控制器上作出反应).
每当自定义ViewGroup获得焦点时,我都需要将焦点传递给一些子视图.
我设置descendantFocusability为beforeDescendants并设置OnFocusChangeListener为自定义ViewGroup但OnFocusChangeListener.onFocusChanged()从未调用.它看起来像beforeDescendants我预期的那样不起作用.实际设置beforeDescendants工作与设置相同afterDescendants- 焦点由最近的子视图拍摄,自定义ViewGroup没有机会决定哪个子视图应该关注焦点.
我怎样才能达到理想的行为?在ViewGroups中处理焦点的最佳实践是什么?
android ×10
android-view ×10
andengine ×1
focus ×1
fullscreen ×1
java ×1
libgdx ×1
listview ×1
viewgroup ×1