Как показать тост точно на кнопке - PullRequest
2 голосов
/ 15 июня 2011

У меня есть различные макеты XML. Во всех этих макетах у меня есть кнопки, но положение кнопки отличается в каждом макете. В моей деятельности эти макеты раздуваются случайным образом (любой макет может выйти на передний план). Поскольку содержимое всех макетов XML одинаково, у них есть одна общая черта - идентификатор кнопок. В каждом XML-файле только (android: layout_marginTop = "145sp" и android: layout_marginBottom = "45sp") отличается для кнопок.

В результате, если кнопка с именем «ALI» отображается в определенном углу, в следующий раз та же кнопка «ALI» может отображаться в другом углу экрана.

Теперь в своей деятельности я хочу, чтобы всякий раз, когда я нажимал на кнопку, ее соответствующее изображение отображалось точно над кнопкой в ​​виде Toast.

Но так как положение кнопки не зафиксировано, я не могу отобразить Toast точно на кнопке. Позиция Toast, которую я получаю, фиксируется независимо от положения кнопки. Но я хочу, чтобы он отображался прямо над кнопкой.

Я использовал следующий код. Если есть какой-либо метод, который может сообщить OnClickListener о положении кнопки в пикселях во время выполнения, то это будет немного удобно.

КОД - КАК СЛЕДУЮЩИЙ для нажатия кнопки события:

button_ALI.setOnClickListener(new View.OnClickListener() {          

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast toast = Toast.makeText(getApplicationContext(),"This is Bat", Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, 0, 0);
            LinearLayout toastView = (LinearLayout) toast.getView();
            ImageView imageCodeProject = new ImageView(getApplicationContext());
            imageCodeProject.setImageResource(R.drawable.b_1);
            toastView.addView(imageCodeProject, 0);
            toast.show();
        }
    });

Ответы [ 3 ]

6 голосов
/ 26 июля 2012
toast.setGravity(Gravity.RIGHT |Gravity.TOP, view.getLeft(), view.getTop()+(view.getBottom()-view.getTop())/2);

должно работать

1 голос
/ 06 августа 2013

Я нашел пример, который мне подходит.Этот пример центрирует тост на полученном представлении:

public void onClick(View v) {
int xOffset = 0, yOffset = 0;
Rect gvr = new Rect();

View parent = (View) v.getParent();
if (parent.getGlobalVisibleRect(gvr)) {
    View root = v.getRootView();

    int halfwayWidth = root.getRight() / 2;
    int halfwayHeight = root.getBottom() / 2;
    // get the horizontal center
    int parentCenterX = ((gvr.right - gvr.left) / 2) + gvr.left;
    // get the vertical center
    int parentCenterY = (gvr.bottom - gvr.top) / 2 + gvr.top;

    if (parentCenterY <= halfwayHeight) {
        yOffset = -(halfwayHeight - parentCenterY);                                     
    } else {
        yOffset = parentCenterY - halfwayHeight;
    }
    if (parentCenterX < halfwayWidth) { 
        // this view is right of center
        xOffset = parentCenterX - halfwayWidth;
    }
}
Toast toast = Toast.makeText(mContext, "Your String", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, xOffset, yOffset);
toast.show();
}

Для получения дополнительной информации вы можете посмотреть, где я нашел этот пример: Расположение сообщений тоста

1 голос
/ 15 июня 2011

скорее поиграйте с предоставлением значений int .... как toast.setGravity(5,6,5);, а также попробуйте другие значения ..

...