2016-04-25 9 views
0

Ich habe ein Tastaturmodalfenster, das 9 * 9 ist. Und benutzte es Sudoku Spielbrett. In Android Studio, die Position der Taste zu bekommen habe ich den folgenden CodeWie wird das Modellfenster am gewünschten Ort angezeigt?

_selectedButton=(Button)view; 

     int tag=(int)_selectedButton.getTag(); 
     _currentRow=tag/9; 
     _currentCol=tag%9; 
int[] location=new int[2]; 
     _selectedButton.getLocationOnScreen(location); 
     _p=new Point(); 
     _p.x=location[0]; 
     _p.y=location[1]; 

     ShowKeyBoard(); 

ShowKeyBoard wie diese

int offsetX=30; 
int offsetY=30; 
_popupWindow.showAtLocation(_keyBoardLayout, Gravity.NO_GRAVITY, _p.x+offsetX, _p.y+offsetY); 

ist nach, dass er einen Schlüssel auswählt und ich das Popup-Fenster schließen.

public void BtnKey1Pressed(View view) 
    { 
     _selectedButton.setText("1"); 
     _popupWindow.dismiss(); 
    } 

Wie kann ich das in Xamarin Android tun? Ist es möglich, solche Daten in Xamarin zu erhalten?

int selectedKey=ShowKeyBoard(); 
+0

Könnten Sie bitte Ihre Frage spezifizieren. Um einen Rückgabewert von ShowKeyboard zu erhalten, müssen Sie es nur mit Rückgabewert deklarieren und einen Wert zurückgeben;) – Matt

+0

All den Code, den ich in Java mit Android Studio geschrieben habe und ich möchte es im Xamarin Android-Format. –

Antwort

2

Ich habe versucht, eine schnelle und schmutzige Implementierung eines Popup-Fensters zu erstellen. Ich nahm an, dass Sie Ihr Popup auf der Schaltfläche anzeigen möchten, die Sie gerade angeklickt haben, deshalb habe ich ShowAsDropDown verwendet. Ich habe den GetLocationOnScreen-Code eingegeben, Sie müssen ihn nur zum Beispiel übergeben.

public sealed class MyPopup : PopupWindow 
{ 
    private readonly Action<int> _callbackMethod; 

    private MyPopup(Activity context, Action<int> callbackMethod) 
     : base(context.LayoutInflater.Inflate(Resource.Layout.Popup, null), 
      ViewGroup.LayoutParams.WrapContent, 
      ViewGroup.LayoutParams.WrapContent) 
    { 
     _callbackMethod = callbackMethod; 
    } 

    public static Task<int> GetNumber(Activity mainActivity, Button button) 
    { 
     var t = new TaskCompletionSource<int>(); 
     var popupWindow = new MyPopup(mainActivity, i => t.TrySetResult(i)); 
     popupWindow.Show(button); 
     return t.Task; 
    } 

    private void Show(View anchor) 
    { 
     SetActionForChildButtons(anchor, View_Click); 
     ShowAsDropDown(anchor); 
    } 

    private void SetActionForChildButtons(View parent, EventHandler e) 
    { 
     var button = parent as Button; 
     if (button != null) 
     { 
      button.Click += e; 
      return; 
     } 

     var viewGroup = parent as ViewGroup; 
     if (viewGroup == null) 
      return; 

     for (var i = 0; i < viewGroup.ChildCount; i++) 
     { 
      var view = viewGroup.GetChildAt(i); 
      SetActionForChildButtons(view, e); 
     } 
    } 

    private void View_Click(object sender, EventArgs e) 
    { 
     var button = sender as Button; 
     if (button == null) 
      return; 

     int number; 
     if (int.TryParse(button.Text, out number)) 
      _callbackMethod?.Invoke(number); 

     Dismiss(); 
    } 
} 

Mit diesem können Sie diese irgendwie eine Nummer für Ihr Feld erhalten

private async void OnClick(object sender, EventArgs e) 
{ 
    var button = sender as Button; 
    if (button == null) 
     return; 
    var location = new int[2]; 
    button.GetLocationOnScreen(location); 
    var number = await MyPopup.GetNumber(this, button); 
    button.Text = number.ToString(); 
} 
+0

Danke für die Idee. Während oben Code für mich nicht funktionierte habe ich etwas ähnliches aus der obigen Antwort erstellt. Ich habe jedoch ein Problem, wenn ich auf die Schaltfläche für die letzte Zeile klicke, wird das Popup nicht angezeigt, da es außerhalb der Grenzen liegt. Wie kann ich erreichen, dass Popup nicht angezeigt wird, wenn es unten angezeigt wird? –

+0

Da Sie den Standort und tatsächlich die Höhe Ihres Popup haben, würde ich vorschlagen zu überprüfen, ob Standort + Höhe größer als Höhe Ihres Layouts ist. Aber dann können Sie wahrscheinlich ShowAtLocation verwenden – Matt

Verwandte Themen