我在Android中設計了一個使用64個按鈕的國際象棋棋盤。但是在設計之後,我面臨很多問題,因爲我需要實現64個OnClickListeners。有沒有其他方法可以使用for
循環來實現OnClickListener,或者使用按鈕設計棋盤是不正確的?設計象棋android中的用戶界面
回答
是的,可以遍歷按鈕併爲每個按鈕添加一個偵聽器。裏面你的循環,你會做這樣的事情:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Handle click events...
}
});
但每個按鈕都有不同的名稱(如a1,a2..a8,b1,b2 ... b8),如何在循環中用作按鈕ID – 2013-03-04 17:40:25
本文有一些關於如何做到這一點的好信息: http://stackoverflow.com/questions/4809834/how-to-iterate-through-a-views-elements – elevine 2013-03-04 17:51:55
我創建了TableLayout 8個表格,每個表格包含LinearLayout.so中的8個按鈕,該帖子中給出的答案將會檢查所有這些兒童(包括按鈕)或不? – 2013-03-04 18:06:55
你應該看看developer samples,它使用了基於網格的遊戲板自定義視圖特別是井字應用程序。你應該能夠擴展這個想法。
如果您想要繼續使用每個方塊的按鈕,您必須知道它們的ID才能創建onClickListener
s。有兩種方法可以解決這個問題。
要麼添加onClickListener在佈局XML:
<Button
parameters...
onClick="myOnClick"
</
在你Activity
那麼您可以創建方法myOnClick:爲按鈕解決方案
public void myOnClick(View clickedView){
//code
}
一個可能更好的方式是創建它們從代碼中取出並創建xml按鈕並添加到當前內容中,或者使用相應的java類創建新按鈕:Button myButton e3 = new Button(context);
如果你真的想要64個獨立的視圖,你不需要64個單獨的onClickListeners;只需在XML中爲視圖指定一個onClick屬性,全部使用與關聯活動相同的方法。然後,您可以在構建時生成一個表來將ID映射到座標,或者您可以使用您自己的屬性將座標添加到每個視圖。
但是,它會爲您的棋盤提供單一視圖更有意義。這個視圖將自己劃分爲64個方格,維護一個內部表格,指示哪些部分在哪裏,在其.onDraw()
中繪製正方形和棋子,並在點擊時確定點擊哪個方塊來進行數學運算。在sample Snake應用中研究TileView.java
;一旦你瞭解了這些代碼,你就可以輕鬆地與你的課程相關聯。
- 1. Android用戶界面設計
- 2. Android中的用戶界面設計
- 3. C++抽象用戶界面設計
- 4. Android,關於用戶界面設計
- 5. 在android中設計國際象棋
- 6. iPhone用戶界面設計
- 7. Android界面設計
- 8. Android界面設計
- 9. 製作中國象棋程序的圖形用戶界面
- 10. Flex中的用戶界面設計
- 11. 瞭解用戶界面的面向對象設計
- 12. 象棋的設計問題
- 13. 如何在Android中設計複雜的用戶界面
- 14. 關於android界面設計
- 15. 從頭創建國際象棋用戶界面
- 16. 設計Android應用程序的用戶界面
- 17. iPad用戶界面設計建議
- 18. 用戶界面設計與c + +
- 19. 用戶界面設計TableView喜歡
- 20. 狀態設計模式用戶界面
- 21. UI設計/用戶界面組件
- 22. Microsoft Access用戶界面設計
- 23. SonarQube 5.1.2版用戶界面設計
- 24. 用戶界面設計工具
- 25. Android用戶界面設計 - 集成它的最佳方式?
- 26. 關於Android用戶界面設計的書籍
- 27. Android Studio用戶界面使用設計或文本?
- 28. Android應用程序用戶界面設計
- 29. 面向對象的國際象棋遊戲設計
- 30. 面向對象設計的國際象棋引擎
僅僅因爲99%的例子使用了「OnClickListener」的匿名子類並不意味着你必須這樣做。用一個在類中存儲x,y的類和一個用x,y作爲參數的構造函數對它進行子類化。 – martijno 2013-03-04 17:38:30