안녕하세요, 자습서를 통해 코치 마크를 만들려고합니다.튜토리얼 (코치 마크) 오버레이 만들기.
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은이 대화 상자의 레이아웃입니다.
내가하고 싶은 일은 텍스트보기의 위치를 동적으로 조정하여 다른 장치 화면을 보완하는 것입니다. (미래에는 화살표를 사용하여 이미지보기를 추가하므로 사물을 가리키는 화살표가 이상 할 것입니다. 그들이 말하는 것을 가리 키지 마라).
양해 바랍니다. 나는 위의 이미지는 내가하고 싶은 것을 보여줍니다
API (8)을 대상으로 할 것이기 때문에 나는 showCaseView을 사용할 수 없습니다. "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;
}
});
}
지금 단추 1의 좌표에 액세스 할 수 있습니다. 그러나, 나는 다른 장치 크기를 수용 할 수있는 버튼 위에 텍스트보기를 배치하는 방법에 대해 확신이 서지 않습니다. 나는 setMargins 메서드의 매개 변수를 가지고 놀았지만 금액을 판단하기는 힘들었다. 몇 가지 조사를 해본 결과 레이아웃 매개 변수가있는 상대적 레이아웃을 사용하고 위와 같은 필드를 사용할 수 있다는 것을 알았지 만 의도 한대로 작동하지 않는 것 같습니다. 텍스트보기가 단추 위로 이동하지 않습니다.
내 코드.
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은 상대적 레이아웃이되었습니다.
안녕하십니까, 답장을 보내 주셔서 감사합니다. 나는 변화를했고 몇 가지 문제가 있었다. 내 overlay_view XML 파일에서 선형 레이아웃을 기준으로 캐스트를 가져올 수 없기 때문에 상대를 LinearLayout으로 레이아웃을 변경해야했습니다. 또한 getTop 메소드를 통한 좌표 X의 값은 0을 반환하는 것처럼 보입니다. 텍스트보기 위치는 원하는 수준으로 변경되지 않았습니다. 위의 변경 사항은 위에 설명되어 있습니다. – user3364963
@ user3364963 코드에서 "LinearLayout"을 "RelativeLayout"으로 변경하고 "x"를 "위로"로 변경하려고 했습니까? – Robbe
좌표와 함께 놀 때 변경 한 후에 이동합니다. 그러나 getTop (x) 및 getLeft (y)가 제공하는 좌표를 사용할 때조차도 작은 전화기에서 실행할 때 여전히 작은 화면을 보완하지 않는 것 같습니다. AVD – user3364963