你好,我正在尝试做一个教练标记过教程.
Main.java
public class Main extends Activity { private button button1; private int x; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_help_overlay); button1 = (button)findVIEwByID(R.ID.button1); x = button1.gettop(); showOverLay(); } private voID showOverLay(){ this.setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); final Dialog dialog = new Dialog(this, 0); dialog.getwindow().setBackgroundDrawable(new colorDrawable(androID.graphics.color.transparent)); dialog.getwindow().setLayout(VIEwGroup.LayoutParams.MATCH_PARENT, VIEwGroup.LayoutParams.MATCH_PARENT); dialog.requestwindowFeature(Window.FEATURE_NO_Title); dialog.setContentVIEw(R.layout.overlay_vIEw); relativeLayout layout = (relativeLayout) dialog.findVIEwByID(R.ID.overlayLayout); layout.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw arg0) { Main.this.setRequestedOrIEntation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); dialog.dismiss(); } }); dialog.show(); }}
所以基本上,当活动首次启动时会调用showOverlay方法.它显示一个占据整个屏幕的对话框,并且透明背景没有标题.下面看到的overlay.xml是此对话框的布局.
我想要做的是动态调整文本视图的位置,使其在按钮上方以补偿不同的设备屏幕(将来我将添加带有指向事物的箭头的图像视图,因此如果这些箭头没有指向它将会很奇怪在他们看来他们参考).
请注意.我不能使用showCaseVIEw,因为我将针对API 8.
上图显示了我想要做的事情.将显示“HEEEEEELP”的文本视图移动到略高于按钮的位置.
main_activity.xml
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" > <button androID:ID="@+ID/button1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_alignParentBottom="true" androID:layout_centerHorizontal="true" androID:layout_marginBottom="96dp" androID:onClick="IDk" androID:text="This button" /></relativeLayout>
overlay.xml
<?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="@null" androID:ID="@+ID/overlayLayout"> <TextVIEw androID:ID="@+ID/textVIEw1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_centerHorizontal="true" androID:layout_centerVertical="true" androID:text="HEEEEEEELP" androID:textcolor="#FFFFFF" androID:textAppearance="?androID:attr/textAppearanceLarge" /></relativeLayout>
谢谢你的阅读.
更新2
我的OnCreate方法
@OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_help_overlay); button1 = (button)findVIEwByID(R.ID.button1); button1.getVIEwTreeObserver().addOnPreDrawListener(new OnPreDrawListener() { public boolean onPreDraw() { top = button1.gettop(); bottom = button1.getBottom(); left = button1.getleft(); right = button1.getRight(); showOverLay(); button1.getVIEwTreeObserver().removeOnPreDrawListener(this); return true; } }); }
我现在可以访问button1的坐标.但是,我不确定如何将文本视图放在按钮上方,该按钮能够满足不同的设备尺寸.
我尝试使用setmargins方法的参数,但很难判断数量.
我做了一些研究,发现我可以使用布局参数的相对布局,并使用像ABOVE等字段.但是这似乎没有按预期工作.文本视图不会超出按钮.
我的代码.
relativeLayout.LayoutParams lp = (relativeLayout.LayoutParams)textVIEw.getLayoutParams();lp.addRule(relativeLayout.CENTER_HORIZONTAL, R.ID.button1);lp.addRule(relativeLayout.ABOVE, R.ID.button1);textVIEw.setLayoutParams(lp);
请注意,我的overlay_vIEw.xml已成为相对布局.
解决方法:
这是你应该做的:
button1.getVIEwTreeObserver().addOnPreDrawListener(new OnPreDrawListener() { public boolean onPreDraw() { button1.getVIEwTreeObserver().removeOnPreDrawListener(this); x = button1.gettop(); showOverLay(); return true; }});
实际上当你调用x = button1.gettop();在onCreate()中,button视图尚未绘制和测量,因此gettop的值为0.试试这个.
总结以上是内存溢出为你收集整理的android – 制作教程(教练标记)叠加.需要帮助根据另一个人的位置移动视图全部内容,希望文章能够帮你解决android – 制作教程(教练标记)叠加.需要帮助根据另一个人的位置移动视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)